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

使用文件重定向向awk输入可变搜索模式,awk,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 通过将第一行的

我正在尝试用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

但这似乎“不雅”。我希望有一种方法可以在一行代码中使用文件重定向(或类似的东西?)来实现这一点。非常感谢您的帮助

您可以使用

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列,将有很多匹配项。请提供示例
file1.txt
file2.txt
以及您期望的输出。太好了,非常感谢!假设我想从命令行而不是脚本中使用它。它看起来像:
awk-vsearch=$(awk'NR==3{print$4}'file1.txt)$0~search{print NR}'file2.txt
命令行中的用法看起来与脚本中的用法相同。是的,您的一行程序是将第一个
awk
合并到第二个命令行的正确方法。你可以一字不差地写一两行,或者根据需要调整常量(3,4)。不过,我认为最后一种选择更好。使用一个命令而不是两个或三个命令通常更好。