如何从文件中删除重复行?

如何从文件中删除重复行?

文件,

TABLE1  
-------  
1234

TABLE1  
-------  
9555  

TABLE1  
-------  
87676  

TABLE1
-------  
2344

我想要的输出像

TABLE1  
-------  
1234
9555  
87676
2344

答案1

这是一个衬垫,使用sedawk

sed '/^$/d' 文件名 | awk '!a[$1]++'

grep和的组合awk

grep 。文件名 | awk '!a[$1]++'

作为 @CAS建议,您awk也可以通过单个命令来完成此操作。

awk '!x[$1]++ && ! /^[[:空白:]]*$/' 文件名

答案2

您可以使用awk '!x[$1]++' file > file_new

在尝试此命令时,我在您提供的文件中得到了一个额外的新行。

我将其修改为awk '!x[$1]++' file | sed '/^$/d' > file_new,这应该可以解决您在这种情况下的问题。

答案3

尽管这是一个旧线程,但我想贡献这个仅使用单个 sed 命令的答案:

sed '1,2p;/^[[:digit:]]/!d;' file

它保留前两行(标题和下划线),然后删除不以数字开头的每一行。

答案4

使用命令uniq,可以删除重复的条目。喜欢 :

cat file | sort -r | uniq

但在这种特定情况下,不会产生完全预期的结果,因为必须对文件进行排序才能uniq工作 - 它只会检测相邻的重复行。
另一个解决方案是读取文件并跳过包含TABLEor 的行----(第一次出现除外):

count_t=0
count_d=0
while read line; do 
  if [[ $line == "TABLE"* ]] ; then  
    if [[ $count_t -eq 0 ]]; then 
      ((count_t++)) 
    else
      continue 
    fi 
  fi
  if [[ $line == "-----"* ]] ; then  
    if [[ $count_d -eq 0 ]]; then 
      ((count_d++)) 
    else
      continue 
    fi
  fi
  echo $line
done < file

awk其他人发布的解决方案sed虽然更好。

相关内容