我试图用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
但这似乎"不优雅"。我希望有一种方法可以使用文件重定向(或类似的东西?)在一行代码中执行此操作。非常感谢任何帮助!
答案 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列,那么会有很多匹配。