在 gawk 或 unix 中查找

在 gawk 或 unix 中查找

我想在 unix 或gawk.我有一个包含一列数字的文件 (file1) 我有一个包含多个列的文件 (file2) 我想在文件 2 的第一列中查找文件 1 中的数字

我正在使用grep -f file1 file2,但这会打印文件二中包含文件 1 中的字符串的所有行,而不仅仅是文件 2 的第一列中包含该字符串的行

我怎样才能用gawk其他 UNIX 工具解决这个问题?

答案1

while read vl ; do grep "^$vl " file2 ; done < file1

read查找以换行符结尾的输入并将其放入变量中vl。通过将其包装在while循环中,将对 的所有内容重复此操作STDIN。通过使用< file1我们将 的内容重定向file1到 STDIN,因此循环会重复 的所有内容file1。对于file1(存储在)的每一行,我们使用前缀为 的搜索词vl进行 grep 。这将搜索词绑定在 中的行的开头。我还在 grep 搜索字符串的末尾添加了一个空格(我假设 file2 的列分隔符是一个空格),这样它只会完全匹配而不是子匹配(如果搜索项是 foo 并且有一行)将 foobar 作为第一列,它将file2^file2file2不是得到匹配)。file2如果该空格不是空格,请将该空格替换为您的字段分隔符。

如果你可以随意更改 file1 那么:

sed -i 's/^\(.*\)$/^\1 /' file1

然后你的原件grep -f就可以工作了(再次注意,我在 后面使用了空格作为分隔符\1)。

相关内容