bash - awk 在读取行中的行为

标签 bash awk

 $ 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/

相关文章:

linux - 保留第一个重复项并使用 Awk 将其余部分替换为空白单元格

bash - 如何从 shell 脚本获取电子邮件中的换行符?

xml - 查找单个字符串的每个实例并将其替换为列表或文件中的另一个实例

awk - 使用 AWK 进行文本操作

bash - 尝试 awk 文件,但无法分配足够的内存。有什么替代方案或调整吗?

linux - Perl + 如何从系统中读取导出的变量 ( Linux )

bash - 为什么有些人在 shell 脚本中的 if 条件后放一个分号?

linux - 如何从变量(从 MYSQL 查询)中获取行数?

c - Bash 将脚本参数插入字符串

bash - 有谁知道仅使用 BaSH 在没有 vim、emacs 或 nano 的情况下编辑文本文件的绝妙技巧?