Text-Processing
在(多個)文件中查找包含輸入文件中給定行的行
如果我有許多如下文件:
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
) 排序。