我有两个文件。我希望我的Unix代码将文件A中每一行的第一列作为变量,并在文件B中查找它。如果找到了,我希望将文件B中找到的行保存在输出文件中。
File A:
1335 skrgrsjgls 1231
12213 23rerwsdf 9605
11567 4693460 0340592
54321 293402460 324
File B:
-54321 Apples
-23453 Grapes
-1335 Pears
-65363 Pineapples
-96506 Grapefruit
Expected Output File:
-1335 Pears
-54321 Apples
我试过的代码:
for i in $(cat File A); do grep -w $i File B > FileC; done
我没有得到任何结果。请任何帮助是赞赏。
4条答案
按热度按时间cgh8pdjw1#
希望对你有用。这可以使用
grep
命令来完成,该命令用于在文件中搜索模式。输出
这是您的测试命令的输出。
6l7fqoea2#
对于大文件,应该避免每行都有一个新的
grep
的循环。awk
是一个很好的工具,另一个解决方案是<(sed -r 's/([^ ]*).*/^-\1 /' FileA)
部分创建了一种内存文件,其中包含您要查找的字符串(以^
、连字符、数字、空格开始的行),grep -f file
使用“文件”作为要查找的多个字符串。2exbekwf3#
好吧,下面的问题就解决了。我感谢所有为这个问题做出贡献的人,我相信他们的版本也是可行的。
z3yyvxxp4#
我同意对于大文件应该避免循环,并且
awk
是一个很好的替代方案。试着做:FNR==NR
部分确保下一个块仅针对第一个文件执行,{ a[$1]=$0; next }
将FileB.txt的第一列保存为数组,$1 in a
将检查FileA.txt中是否存在该密钥,{ print a[$1] }
打印找到的匹配项,FileB.txt FileA.txt
是给出给CMD行的参数(注意顺序),并且
> Output.txt
将该打印保存到输出文件。