使用文件重定向将可变搜索模式输入到awk

时间:2015-07-23 17:52:16

标签: awk

我试图用bash编写一个小脚本。该脚本的目的是从file1.txt中提取搜索模式,并从file2.txt打印匹配搜索的行号。我知道file1.txt中我想要的模式的确切位置,我可以用sed和awk很容易地解决这个问题。

sed -n 3p file1.txt | awk '{print $4}'

我遇到问题的部分是将该信息再次传递给awk,以用作file2.txt中的搜索模式。有点像:

awk '/search_pattern/{print NR}' file2.txt

通过将第一行的输出存储为变量,并将该变量传递给第二行中的awk,我能够使代码在两行代码中运行,

myVariable=`sed -n 3p file1.txt | awk '{print $4}'`
awk '/'"$myVariable"'/{print NR}' file2.txt

但这似乎"不优雅"。我希望有一种方法可以使用文件重定向(或类似的东西?)在一行代码中执行此操作。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用

避免sed | awk
awk 'NR==3{print $4; exit 0}' file1.txt

您可以使用以下方式进行搜索:

search=$(awk 'NR==3{print $4; exit 0}' file1.txt)
awk -v search="$search" '$0 ~ search { print NR }' file2.txt

你甚至可以把这一切都写在一条线上,但我不建议这样做;清晰度比简洁更重要。

原则上,您可以使用:

awk 'NR==3{search = $4; next} FNR!=NR && $0 ~ search {print NR}' file1.txt file2.txt

这会扫描file1.txt并找到搜索模式;然后它扫描file2.txt并找到匹配的行。一条线 - 甚至是中等清晰度。如果file1.txt的第3行没有第4列,那么会有很多匹配。