file1,每行包含一个字符串。我想检查 file2 的第二列中是否存在每个字符串。file2 每行包含两个以空格分隔的字符串,但有些行可能在第一列之前有前导空格。
我只想使用 grep 和/或 cut 来执行匹配并将匹配的行从 file2 输出到 newFile.txt,确保整个单词匹配(-w)。
我试过了
grep -wF -f file1 file2 > newFile.txt
但由于文件大小,终端无限运行。
我也尝试过
grep -wF -f <(cut -d ' ' -f 2 file2) | grep -wF -f - file2 > newFile.txt
这只对 file2 中的某些行有效,因为某些行在 2 个字符串之前有多个空格,尽管这些字符串仅由一个空格分隔。
文件1:
aaa
bbb
ccc
文件2:
a aaa (should match)
b bbb (should match and does but the former spaces throws off cut -d, resulting in incomplete output of line in the newFile.txt)
c cc (should not match)
问题:如何高效地提取并匹配 file2.txt 第二列中的整个单词,同时处理不一致的前导空格?我更喜欢使用 grep 和/或 cut,但我愿意接受一些小的修改。
我倾向于使用 awk,在这种情况下我使用了粘贴命令,我猜您可以使用类似这样的正则表达式:
如果我理解正确的话...这应该从 file2 中提取行,其中第二列与 file1 条目之一完全匹配,即使前导空格
寻求帮助以使用 grep 和 cut 高效地完成这项工作就像寻求帮助用厨房叉子和回形针建造花园围栏一样。它们根本不是这项工作的合适工具,因此无法有效地将它们用于这项工作,如果不添加更多工具来帮助它们,它们也无法稳健地(或可移植地)使用。相比之下,仅使用 awk 的解决方案将是简单、高效和可移植的,例如,使用任何 POSIX awk 都可以运行以下命令:
在我注意到 OP 之前的原始答案是“我想检查每个字符串是否存在于 file2 的第二列中。file2 每行包含两个单个空格分隔的字符串”并且认为他们想要匹配 file2 中的所有“单词”:
如果您有比字母数字更多的字符,并且
_
您认为它们是“单词”的一部分,那么只需更改[^[:alnum:]_]
为包含它们,例如,如果“单词”可以包含.
,-
然后将其更改为[^[:alnum:]_.-]