当我将命令行参数传递给我的脚本时,我们必须使用$ 1,$ 2等来访问该值。同样,当我们使用awk时,我们可以提到文件的列为$ 1,$ 2等。 ,
#!/bin/bash
cat $1 | awk '$1 > 20'
我们假设文件内容如下。
20 A
10 B
5 D
13 K
50 C
如何在阅读此代码时告诉它是否会访问命令行$1
- 输入文件名 - 还是cat
输出的第一列?
答案 0 :(得分:1)
这里有一个简单的规则: shell不对单引号字符串执行任何扩展。
在其他情况下也是如此:echo '$1'
打印完整的字符串$1
。
因此,在下面的代码中(为了正确性而编辑 - 在shell变量周围缺少双引号导致了一个错误,并且cat
的使用产生了不必要的低效率):
awk '$1 > 20' <"$1"
...我们将$1 > 20
视为shell的字面值,仅由awk
和"$1"
解析为代码 - 用双引号解析,由shell扩展。 / p>
答案 1 :(得分:0)
使用awk时是否有任何其他方式来表示列 在shell脚本中?
您可以使用变量来表示它们例如
awk '{for(i=1;i<NF;i++){print $i}}' file
此处NF
是字段总数(可以视为列。)当i
在循环中获得不同的值时,$i
会扩展为{{1 },$1
等等。