如果我有文件test.txt
包含3行;
1
2
3
如果我运行
cat test.txt| while read a ; do awk -v c=$a '{print c}' ;done
它将打印这些值。
1
1
但是如果我运行
cat test.txt| awk '{a=$0; print a}'
它将表现出预期的效果。
1
2
3
有什么解释吗?
谢谢
答案 0 :(得分:0)
在您的第一个版本awk
中,stdin没有达到您的预期。
从@William Purcell的注释中复制:“ read命令读取输入的第一行,而awk读取接下来的2行(2和3)。这就是为什么看到两行输出的原因。”
对于接下来的两行,您已经使用c
(从第一次读取开始)初始化了1
变量。
如果将语句包装在BEGIN
块中,它将按预期工作。
$ seq 3 | while IFS= read -r a; do awk -v c="$a" 'BEGIN{print c}'; done
但是,这是做事效率低下的方式。
答案 1 :(得分:0)
让awk
从已设置的变量而不是从stdin中读取。
seq 3 | while IFS= read -r a; do awk '{print}' <<<"$a"; done