我正在编写一个Bash脚本,它需要接收并存储一个参数;
threshold = $1
然后我有一些类似这样的示例数据:
5 blargh
6 tree
2 dog
1 fox
9 fridge
我希望打印只有行号大于输入参数(阈值)的行。
我目前正在使用:
awk '{print $1 > $threshold}' ./file
但是什么也没有打印出来,希望能得到帮助。
你很接近了,但需要更像这样:
$ threshold=3
$ awk -v threshold="$threshold" '$1 > threshold' file
使用-v
创建变量可以避免在awk
脚本中尝试扩展shell变量的丑陋。
编辑:
您展示的当前代码存在一些问题。首先,您的awk
脚本是单引号括起来的(很好),这会阻止$threshold
展开,因此该值永远不会被插入到脚本中。其次,您的条件应该放在花括号外面,即:
$1 > threshold { print }
这个方法是有效的,但`print`语句并不是必须的(因为它是默认的操作),所以我将其简化为:
This works, but the `print` is not necessary (it's the default action), which is why I shortened it to$1 > threshold
$1
,你可以使用它代替。 - FatalError-v
和变量名
之间使用空格。旧版的OSX会因为缺少空格而出现问题。你还应该始终将变量用双引号括起来。另一种方法是在表达式后面放置变量,例如:awk '$1 > t' t="$threshold" file
。 - Jotne