如何从数字列表中选择文件中包含数字的行

如何从数字列表中选择文件中包含数字的行

我有一个文本文件,file.dat其中有许多由空格分隔的列。第二列中有一些数字。我有另一个文本文件,select.dat其中包含数字列表。我想从第一个文本文件 ( file.dat) 中选择行,以便第二列中的数字包含在select.dat.使用grep -f selected.dat file.dat不起作用,因为其中包含的数字select.dat可以存在于其他列中。但我想选择仅在第二列中包含这些数字的行。我怎样才能做到这一点?

答案1

使用awkawk使用关联数组;您可以使用其中的数字作为select.dat键构建一个数组,而不必费心分配任何值。然后,您可以使用简单的检查“___ in <arrayname>”作为过滤器来确定要打印的内容。

NR表示“记录号”,FNR表示“文件记录号”。该测试FNR == NR本质上意味着“我还在处理第一个文件吗?”因此,以下代码将使用第一个给定文件中的行作为键构建一个数组(没有值)。然后,它仅打印第二个文件中在所构建的数组中找到第二个字段的那些行。

awk 'FNR == NR {myarray[$0]; next} $2 in myarray { print }' select.dat file.dat

相关内容