![如何从数字列表中选择文件中包含数字的行](https://linux22.com/image/81647/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%95%B0%E5%AD%97%E5%88%97%E8%A1%A8%E4%B8%AD%E9%80%89%E6%8B%A9%E6%96%87%E4%BB%B6%E4%B8%AD%E5%8C%85%E5%90%AB%E6%95%B0%E5%AD%97%E7%9A%84%E8%A1%8C.png)
我有一个文本文件,file.dat
其中有许多由空格分隔的列。第二列中有一些数字。我有另一个文本文件,select.dat
其中包含数字列表。我想从第一个文本文件 ( file.dat
) 中选择行,以便第二列中的数字包含在select.dat
.使用grep -f selected.dat file.dat
不起作用,因为其中包含的数字select.dat
可以存在于其他列中。但我想选择仅在第二列中包含这些数字的行。我怎样才能做到这一点?
答案1
使用awk
。 awk
使用关联数组;您可以使用其中的数字作为select.dat
键构建一个数组,而不必费心分配任何值。然后,您可以使用简单的检查“___ in <arrayname>
”作为过滤器来确定要打印的内容。
NR
表示“记录号”,FNR
表示“文件记录号”。该测试FNR == NR
本质上意味着“我还在处理第一个文件吗?”因此,以下代码将使用第一个给定文件中的行作为键构建一个数组(没有值)。然后,它仅打印第二个文件中在所构建的数组中找到第二个字段的那些行。
awk 'FNR == NR {myarray[$0]; next} $2 in myarray { print }' select.dat file.dat