我有一个包含多列数据的大型文本文件。我正在尝试编写一个脚本,从命令行接受列号和关键字,并在显示任何匹配的整行之前搜索任何匹配。
我一直在尝试以下方面:
grep $fileName | awk '{if ($'$columnNumber' == '$searchTerm') print $0;}'
但这根本不起作用。我在正确的路线上吗?谢谢你的帮助!
答案 0 :(得分:2)
-v选项可用于将shell变量传递给awk
命令。
您可能正在寻找以下内容:
awk -v s=$SEARCH -v c=$COLUMN '$c == s { print $0 }' file.txt
修改强>
我总是试图编写更优雅,更紧凑的代码。所以这就是丹尼斯的意思:
awk -v s="$search" -v c="$column" '$c == s { print $0 }' file.txt
答案 1 :(得分:0)
看起来足够合理。尝试使用set -x
查看传递给awk
的确切内容。你也可以使用不同的和/或更多的awk东西,包括摆脱单独的grep:
awk -v colnum=$columnNumber -v require="$searchTerm"
"/$fileName/ { if (\$colnum == require) print }"
通过设置awk变量(在本例中为colnum
和require
)然后使用文字字符串$colnum
来获取所需字段和变量{{1}获取必需字符串。
请注意,在所有情况下(使用或不使用require
命令),grep
中的任何正则表达式元字符都将是元-y,例如,$fileName
将匹配文件命名为this.that
,但名为this.that
。