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
另一个golfedawk
变体
$ awk 'gsub(FS,RS)'
只有在有替换时才打印。另一个golfedawk
变体
$ awk 'gsub(FS,RS)'
只有在有替换的情况下才打印。只有在有多个姓名的情况下才打印。只有在有多个姓名的情况下才打印hello Bhuvanesh,你能告诉我我的答案是否对你有帮助吗?在我的答案的评论部分,请干杯。你好Bhuvanesh,你能告诉我吗如果我的回答对你有帮助?请在我的回答的评论部分,干杯。