$ cat file
11 asasaw121
12 saasks122
13 sasjaks22
$ cat no
while read line
do
var=$(awk '{print $1}' $line)
echo $var
done<file
$ cat yes
while read line
do
var=$(echo $line | awk '{print $1}')
echo $var
done<file
$ sh no
awk: can't open file 11
source line number 1
awk: can't open file 12
source line number 1
awk: can't open file 13
source line number 1
$ sh yes
11
12
13
为什么第一个不起作用? awk 希望在 $1 中找到什么?我认为理解这一点将帮助我避免许多脚本问题。
最佳答案
awk
总是需要一个文件名作为输入
在下文中,$line
是字符串而不是文件。
var=$(awk '{print $1}' $line)
你可以说(注意变量周围的双引号)
var=$(awk '{print $1}' <<<"$line")
关于bash - awk 在读取行中的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20104364/