如果是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 来排序,然后将结果输出到其他文件。
哥无聊就给你写一个脚本吧#!/bin/bash
#把第四列相同的行提取出来单独保存到一个文件中
for columns in $(awk '{print $4}' filename.txt|sort|uniq)
do
awk '{if($4=="'$columns'") print $0}' filename.txt>>$columns
done
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)