我有两个文件,需要用linux 命令提取两个文件中,输出 分别有的行 和 相同的行,求助如何写命令?

我有两个文件,需要用linux 命令提取两个文件中,输出 分别有的行 和 相同的行,求助如何写命令?,第1张

你算问对人咯。使用linux的comm

如果是WIN下的文件,注意先转换换行符号!!!

先对文件进行排序去重复:sort filename1 |uniq>filename1-sorted

然后对第2个文件也排序去重复并管道使用comm 找出符合你要求的:

共同拥有的行:sort filename2|uniq|comm -12 - filename1-sorted>共同拥有的

文件 filename1-sorted独有的: sort filename2|uniq|comm -13 - filename1-sorted>filename1-sorted独有

文件 filename2独有的: sort filename2|uniq|comm -23 - filename1-sorted>filename2独有。

赶紧给分,哈哈!

用comm相对比较简单,也可以用 awk做:

共同拥有的:

gakw 'ARGIND==1{a[$1]=$1} ARGIND>1{if(a[$1]!="") print $0}' file1 file2>共同拥有

gakw 'ARGIND==1{a[$1]=$1} ARGIND>1{if(a[$1]=="") print $0}' file1 file2>file2独有

gakw 'ARGIND==1{a[$1]=$1} ARGIND>1{if(a[$1]=="") print $0}' file2 file1>file1独有

第一,用sort+uniq,注意,单纯uniq是不行的。

第二,用sort+awk命令,注意,单纯awk同样不行,原因同上。

第三,用sort+sed命令,同样需要sort命令先排序。

以上原理都是上下行比对,如果中间开了几行,uniq就不生效

例如:

111

222

111

是不能正确排序的,必须是:

111

111

222

uniq才会生效,所以都需要先用sort 来排序,然后将结果输出到其他文件。

cat file1 |uniq -c >file2文件1的重复行会将文件2的内容全部覆盖

cat file1 |uniq -c >>file2文件1的重复行将追加到文件2内


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7437840.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存