ファイルから重複した行を削除する方法は?

ファイルから重複した行を削除する方法は?

文書、

TABLE1  
-------  
1234

TABLE1  
-------  
9555  

TABLE1  
-------  
87676  

TABLE1
-------  
2344

私が望む出力は次のとおりです。

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

答え1

sedこれは以下を使用するライナーですawk

sed '/^$/d'ファイル名| awk '!a[$1]++'

grepと次の組み合わせawk

grep。ファイル名| awk '!a[$1]++'

ように @カス提案された内容は、awk単一のコマンドでこれを行うこともできます。

awk '!x[$1]++ && ! /^[[:blank:]]*$/' ファイル名

答え2

あなたはそれを使用することができますawk '!x[$1]++' file > file_new

このコマンドを試みると、指定したファイルに新しい行が追加されました。

これを修正しましたが、awk '!x[$1]++' file | sed '/^$/d' > file_newこの場合は問題が解決します。

答え3

これは古いスレッドですが、単一のsedコマンドのみを使用してこの答えを提供したいと思います。

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

最初の2行(タイトルとアンダースコア)を保持し、数字で始まらないすべての行を削除します。

答え4

コマンドを使用すると、uniq重複項目を削除できます。良い:

cat file | sort -r | uniq

ただし、この特別なケースでは、ファイルが機能するためにソートする必要があるため、正確に予想される結果は生成されません。uniq隣接する重複行のみを検出します。
別の解決策は、ファイルを読み取り、TABLE次の行をスキップすることです----(最初の項目を除く)。

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より良いです。

関連情報