将两个 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.