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