Text-Processing

在(多個)文件中查找包含輸入文件中給定行的行

  • October 16, 2015

如果我有許多如下文件:

file1:

123
456
789
012

file2:

line1  922
line2  392
line3  456
line5  291
line6  201
...

file3:

line1  111
line2  123
line3  19
line5  542
line6  456
...

什麼是獲得file1包含在一個行中的所有 file2行的最佳方法和file3

在這個例子中,它只是:

456
grep -of file1 file2|xargs -I {} grep -o "{}" file3

這首先獲取 file1 的輸入並將其逐行輸入到 file2 中,如果有的話,返回完全匹配的文本。然後將結果(如果有)逐行輸入到 file3 中,再次僅返回匹配的文本。

您可以join連續使用 2 次:

join -1 1 -2 2 -o 1.1 <(join -1 1 -2 2 <(sort file1) <(sort -k2 file2)) <(sort -k2 file3)

僅列印:

465

先看內在join。它通過使用欄位 1 in和欄位 2 in來連接file1和連接。file2``file1``file2

然後所有這一切再次與file3. 請注意,文件必須按連接欄位 ( sort -k) 排序。

引用自:https://unix.stackexchange.com/questions/224122