将两个awk列传递给while读取命令

时间:2016-03-20 21:59:49

标签: bash unix awk gawk

SampleFile

Two Words,Extra

我的代码:

cat SampleFile | awk -F "," '{print $1" "$2}' | while read var1 var2;
do
    echo $var1
done

这将只打印Twovar2将打Words。有没有办法可以将Two Words传递给var1

2 个答案:

答案 0 :(得分:3)

你不必为此使用awk。 Bash有一个内置变量来确定单词的分割位置:

while IFS=, read -r var1 var2; do
    echo "$var1"
done < SampleFile

IFS设置为,,因此分词会以逗号进行。

我使用重定向而不是管道到while循环,而不是产生子shell。

一句话:在这种情况下你不需要cat。 awk可以将文件名作为参数,所以

cat SampleFile | awk -F "," '{print $1" "$2}'

变为

awk -F "," '{print $1, $2}' SampleFile

此外,使用print时,您不需要明确地引入空格:如果您用逗号分隔字段,awk将用OFS的值替换逗号(输出)字段分隔符)变量,默认为空格。

答案 1 :(得分:0)

...| while read var1; do echo $var1 done