每行删除重复项

时间:2010-08-04 23:29:23

标签: bash scripting sed

我有几个csv看起来像这样:

我有几个大文本文件(csv),在某些行上有冗余条目。也就是说,由于它们被合并的方式,某个字段通常具有相同的值两次或三次。但它并不总是以相同的顺序。

BWTL,NEWSLETTER,NEWSLETTER
BWTL,NEWSLETTER,R2R,NEWSLETTER
MPWJ,OOTA主机,OOTA主机,OOTA主机
OOTA主机,ITOS,OOTA主机

等。彼此相邻的条目很容易用sed

进行清理

sed -i“”的/ NEWSLETTER,NEWSLETTER / NEWSLETTER / g'* .csv

是否有类似的快速方法来修复其他副本?

3 个答案:

答案 0 :(得分:0)

您可以执行类似

的操作
sed -i "" 's/^\(.*NEWSLETTER.*\), NEWSLETTER/\1/g' eNewsletter.csv_new.csv

通过捕获所有内容到第二个NEWSLETTER ^表示开头行 \(\)分隔捕获,.*表示任何内容。然后它将匹配的字符串替换为仅捕获的部分。

答案 1 :(得分:0)

#!/bin/bash

awk -F"," '
{
 delete a
 for(i=1;i<=NF;i++){
 gsub(/^ +| +$/,"",$i)
 if( !( $i in a) ) {
     printf "%s,",$i
     a[$i]
 }
 }
 print ""
}' file

答案 2 :(得分:0)

尝试:

# Sort before using the uniq command
sort largefile.csv | sort | uniq -d

虽然,这只会报告彼此相邻的重复项。