Shell awk-从变量打印位置

Shell awk-从变量打印位置,shell,awk,Shell,Awk,这是我需要解析的字符串 line='aaa vvv ccc' 我需要一个接一个地打印这些值 no_of_users=$(echo $line| wc -w) aaa vvv ccc 如果no\u of_user大于1,则我需要逐个打印这些值 no_of_users=$(echo $line| wc -w) aaa vvv ccc 我用了这个脚本 if [ $no_of_users -gt 1 ] then for ((n=1;n<=$no_of_users;n++))

这是我需要解析的字符串

line='aaa vvv ccc'
我需要一个接一个地打印这些值

no_of_users=$(echo $line| wc -w)
aaa
vvv
ccc
如果
no\u of_user
大于1,则我需要逐个打印这些值

no_of_users=$(echo $line| wc -w)
aaa
vvv
ccc
我用了这个脚本

if [ $no_of_users -gt 1 ]
 then 
 for ((n=1;n<=$no_of_users;n++))
  do 
 
  -- here is my issue ##echo 'user:'$n $line|awk -F ' ' -vno="${n}" 'BEGIN { print no }'
   done
fi
if[$no\u of\u用户-gt 1]
然后
对于((n=1;n第一种解决方案:在单个
awk
中,您可以尝试以下内容。其中
var
是一个
awk
变量,其中包含shell变量

awk -v var="$line" '
BEGIN{
  num=split(var,arr," ")
  if(num>1){
    for(i=1;i<=num;i++){ print arr[i] }
  }
}'
第一种解决方案:在单个
awk
中,请尝试以下操作。其中
var
是一个
awk
变量,其中包含shell变量

awk -v var="$line" '
BEGIN{
  num=split(var,arr," ")
  if(num>1){
    for(i=1;i<=num;i++){ print arr[i] }
  }
}'

您可以使用此
awk

awk '{print $1, $2, $3}' OFS='\n' <<< "$line"
aaa
vvv
ccc

awk'NF>1{OFS=“\n”$1=$1}1'您可以使用此
awk

awk '{print $1, $2, $3}' OFS='\n' <<< "$line"
aaa
vvv
ccc
awk'NF>1{OFS=“\n”$1=$1}1'另一个选项:

if [ $no_of_users -gt 1 ]
 then 
 for ((n=1;n<=$no_of_users;n++))
  do 
  echo 'user:'$n $(echo $line|awk -F ' ' -v x=$n '{printf $x }')
   done
fi
if[$no\u of\u用户-gt 1]
然后
对于((n=1;n另一个选项:

if [ $no_of_users -gt 1 ]
 then 
 for ((n=1;n<=$no_of_users;n++))
  do 
  echo 'user:'$n $(echo $line|awk -F ' ' -v x=$n '{printf $x }')
   done
fi
if[$no\u of\u用户-gt 1]
然后
对于((n=1;n您可以使用grep

echo $line | grep -o '[a-z][a-z]*'
你可以使用grep

echo $line | grep -o '[a-z][a-z]*'
使用bash:

$ line='aaa vvv'ccc'
$ [[ $line =~ \  ]] && echo -e ${line// /\\n}
aaa
vvv
ccc

$ line=aaa
$ [[ $line =~ \  ]] && echo -e ${line// /\\n}
$ 
如果您在另一个外壳上:

$ line="foo bar baz" bash -c '[[ $line =~ \  ]] && echo -e ${line// /\\n}'
使用bash:

$ line='aaa vvv'ccc'
$ [[ $line =~ \  ]] && echo -e ${line// /\\n}
aaa
vvv
ccc

$ line=aaa
$ [[ $line =~ \  ]] && echo -e ${line// /\\n}
$ 
如果您在另一个外壳上:

$ line="foo bar baz" bash -c '[[ $line =~ \  ]] && echo -e ${line// /\\n}'

同样使用
awk

awk '{print $1, $2, $3}' OFS='\n' <<< "$line"
aaa
vvv
ccc

awk'{print$1,$2,$3}'OFS='\n'也使用
awk

awk '{print $1, $2, $3}' OFS='\n' <<< "$line"
aaa
vvv
ccc
awk'{print$1,$2,$3}'OFS='\n'或真正的强者:

printf "%s\n" $line
注意:
$line
未加引号)

printf
将使用
中的所有单词,并应用单词拆分,因此每个单词都作为单个输入

示例使用/输出

$ line='aaa vvv ccc'; printf "%s\n" $line
aaa
vvv
ccc
或者是一个真正的强者:

printf "%s\n" $line
注意:
$line
未加引号)

printf
将使用
中的所有单词,并应用单词拆分,因此每个单词都作为单个输入

示例使用/输出

$ line='aaa vvv ccc'; printf "%s\n" $line
aaa
vvv
ccc
grep-Eq'[:space:][]'
grep-Eq'[:space:][]
e、 g

e、 g


另一个golfed
awk
变体

$ awk 'gsub(FS,RS)'

只有在有替换时才打印。

另一个golfed
awk
变体

$ awk 'gsub(FS,RS)'

只有在有替换的情况下才打印。

只有在有多个姓名的情况下才打印。只有在有多个姓名的情况下才打印hello Bhuvanesh,你能告诉我我的答案是否对你有帮助吗?在我的答案的评论部分,请干杯。你好Bhuvanesh,你能告诉我吗如果我的回答对你有帮助?请在我的回答的评论部分,干杯。