将两个 awk 列传递给 while read 命令
Passing two awk columns into a while read command
SampleFile
:
Two Words,Extra
我的代码:
cat SampleFile | awk -F "," '{print " "}' | while read var1 var2;
do
echo $var1
done
这将仅打印出 Two
,而 var2
将占用 Words
。有没有办法让我可以将 Two Words
传递给 var1
?
...| while read var1; do echo $var1 done
您不必为此使用 awk。 Bash 有一个内置变量来确定单词的拆分位置:
while IFS=, read -r var1 var2; do
echo "$var1"
done < SampleFile
IFS
设置为 ,
,因此分词发生在逗号处。
我使用重定向,而不是管道到 while
循环,它的优点是不会生成子 shell。
备注:在此上下文中您不需要 cat
。 awk 可以将文件名作为参数,所以
cat SampleFile | awk -F "," '{print " "}'
变成
awk -F "," '{print , }' SampleFile
此外,当使用 print
时,您不需要显式引入 spaces:如果您用逗号分隔您的字段,awk 将用 [= 的值替换逗号18=](输出字段分隔符)变量,默认为 space.
SampleFile
:
Two Words,Extra
我的代码:
cat SampleFile | awk -F "," '{print " "}' | while read var1 var2;
do
echo $var1
done
这将仅打印出 Two
,而 var2
将占用 Words
。有没有办法让我可以将 Two Words
传递给 var1
?
...| while read var1; do echo $var1 done
您不必为此使用 awk。 Bash 有一个内置变量来确定单词的拆分位置:
while IFS=, read -r var1 var2; do
echo "$var1"
done < SampleFile
IFS
设置为 ,
,因此分词发生在逗号处。
我使用重定向,而不是管道到 while
循环,它的优点是不会生成子 shell。
备注:在此上下文中您不需要 cat
。 awk 可以将文件名作为参数,所以
cat SampleFile | awk -F "," '{print " "}'
变成
awk -F "," '{print , }' SampleFile
此外,当使用 print
时,您不需要显式引入 spaces:如果您用逗号分隔您的字段,awk 将用 [= 的值替换逗号18=](输出字段分隔符)变量,默认为 space.