Linux-Linux Shell删除两个文件相同部分

Linux-Linux Shell删除两个文件相同部分

甜柠檬 发布于 2017-03-07 字数 294 浏览 1531 回复 3

两个结果集都有如下格式的行:
2012-03-25 18:30:29|abc|1048315014
2012-03-25 20:43:49|vsd|2331250121
2012-03-25 22:27:01|abc|2416567343

cat file1 | awk -F '|' '{print $2}'
cat file2 | awk -F '|' '{print $2}'
如何对这两个结果集进行比较得出其中$2不同的记录?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瑾兮 2017-09-16 3 楼

#!/bin/bash
#判断是否输入两个参数,文件1 和 文件2
if [ $# != 2 ]
then
echo "using:please enter two parameters"
exit 1
fi
#判断两个文件是否是普通文件
if [ -f $1 -a -f $2 ]
then
sed '1,$s/s/n/g' $1|#把文件1中的空格都替换为换行符,使得所有的单词都变为一列,循环送到#while的word变量中
while read word
do
grep -q "<$word>" $2 #读到的每一个词在文件2查找,加-q参数后不打印搜索结果
if [ $? -eq 0 ] #如果查找成功,进入if模块中
then
sed -i "1,$s/<$word>//g" $1 #把文件1中的所有word单词删除
sed -i "1,$s/<$word>//g" $2 #把文件2中的所有word单词删除
fi
done
fi
sed -i -e "/^s$/d" -e "1,$s/s{2,}/ /g" -e "s/^s//g" $1
sed -i -e "/^s
$/d" -e "1,$s/s{2,}/ /g" -e "s/^s//g" $2
#最后两句用来调整 删除所有相同单词后文件的格式
#"/^s*$/d"用来删除多有空行

#"1,$s/s{2,}/ /g"用来使多个空格变为一个空格
#"s/^s//g" $1 用来删除行首空白符
# "-e" 参数用来在一条语句中执行多条sed命令

泛泛之交 2017-09-15 2 楼

awk 'NR==FNR{a[$0]=$0;next;}!a[$0];' file1 file2

泛泛之交 2017-09-12 1 楼

方法一:

  comm -23 file1 file2

  方法二:

  grep -v -f file1 file2

  /注::此法在对比数字时候比较凑效果,文本对比不建议使用/

  方法三:

  awk '{print NR,$0}' file1 file2 |sort -k2|uniq -u -f 1|sort -k1|awk '{print $2}'

  或者:

  awk '{print $0}' file1 file2 |sort|uniq -u