删除逗号管理的重复字段

时间:2017-06-22 16:02:36

标签: regex linux text awk sed

我的linux centos 7服务器上有以下格式的大文本文件。

430004, 331108, 075, 11, 19, Chunsuttiwat Nattika
431272, 331108, 075, 11, 19, Chunsuttiwat Nattika
435979, 335086, 803, 6, 19, ANNI BRENDA
436143, 335151, 545, 4, 23, Agrawal Abhishek
436723, 335387, 386, 2, 19, Bhati Naintara
438141, 325426, 145, 11, 19, Teh Joshua

我想在第一个逗号后删除包含重复字符串的所有行。

所以输出将是

435979, 335086, 803, 6, 19, ANNI BRENDA
436143, 335151, 545, 4, 23, Agrawal Abhishek
436723, 335387, 386, 2, 19, Bhati Naintara
438141, 325426, 145, 11, 19, Teh Joshua

我应该使用哪个命令?

3 个答案:

答案 0 :(得分:1)

更新

排序 + uniq + awk 管道

sort -k2,2 file | uniq -f1 -c -w7 | awk '$1==1{ sub(/[[:space:]]*[0-9]+[[:space:]]*/,"",$0); print}' 
  • sort -k2 -n file - 按数字排序第二个字段

  • uniq -f1 -c - 输出行数(-f1 - 跳过文件中的第1个字段)

  • awk '$1==1{ $1=""; print}' - 打印仅出现一次的行($1==1 - 检查来自uniq命令的计数值)

答案 1 :(得分:0)

使用awk

#Input
awk '{R[i++]=$0;f=$1;$1="";N[$0]++;}
     END{for(i=0;i<NR;i++){
     temp=R[i];sub(/^[[:digit:]]*\, /,"",R[i]);
     if(N[" "R[i]]==1){print temp}}}' filename
#Output
435979, 335086, 803, 6, 19, ANNI BRENDA
436143, 335151, 545, 4, 23, Agrawal Abhishek
436723, 335387, 386, 2, 19, Bhati Naintara
438141, 325426, 145, 11, 19, Teh Joshua

答案 2 :(得分:0)

这就是你所需要的:

$ awk 'NR==FNR{c[$2]++;next} c[$2]==1' file file
435979, 335086, 803, 6, 19, ANNI BRENDA
436143, 335151, 545, 4, 23, Agrawal Abhishek
436723, 335387, 386, 2, 19, Bhati Naintara
438141, 325426, 145, 11, 19, Teh Joshua