我有 15 个不同的文件,我想要一个新文件,其中所有文件中只包含公共(public)行。例如:
File1:
id1
id2
id3
file2:
id2
id3
id4
file3:
id10
id2
id3
file4
id100
id45
id3
id2
I need the output be like:
newfile:
id2
id3
我知道这个命令适用于每对文件:
grep -w -f file1 file2 > 输出
但我需要一个命令来处理 2 个以上的文件。
请问有什么建议吗?
最佳答案
Perl 来救援:
perl -lne 'BEGIN { $count = @ARGV }
$h{$_}{$ARGV} = 1;
}{
print $_ for grep $count == keys %{ $h{$_} }, keys %h
' file* > newfile
-n
逐行读取输入文件-l
在print
中添加换行符@ARGV
数组包含输入文件名,在BEGIN
处将其分配给$count
只是对它们进行计数$ARGV
包含当前输入文件的名称$_
包含从文件中读取的当前行。%h
哈希包含 id 作为键,每个键包含一个哈希引用,其中文件名包含 id 作为键}{
是“爱斯基摩问候语”运算符,它引入了在输入耗尽后运行的代码- 我们只输出文件数量等于所有文件数量的 id。它适用于任意数量的文件。
关于perl - 如何提取多个文件中的公共(public)行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127046/