我想在 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
^
file2
file2
不是得到匹配)。file2
如果该空格不是空格,请将该空格替换为您的字段分隔符。
如果你可以随意更改 file1 那么:
sed -i 's/^\(.*\)$/^\1 /' file1
然后你的原件grep -f
就可以工作了(再次注意,我在 后面使用了空格作为分隔符\1
)。