行をソートせずに重複した行を削除したいと思います。また、先行スペースを無視したいと思います。
猫テスト.txt
abc
def
pqr
abc
xyz
def
efg
その後、出力は次のようになります。
abc
def
pqr
xyz
efg
答え1
この試み:
$ awk 'NF && !($1 in a){a[$1];p=$1;print (getline == 0) ? p : p"\n"}' cat
abc
def
pqr
xyz
efg
説明する
NF && !($1 in a)
:空ではなく、値が連想配列にまだ表示されていない行のみを処理しますa
。a[$1]
:値が表示されない場合は連想配列に保存しますa
。p=$1;print (getline == 0) ? $1 : p"\n"
:値を変数に保存しますp
。ファイルの終わりでない場合は変数p
ラップを印刷し、ファイルの終わりでない場合はp
値のみを印刷します。
答え2
このコマンドは機能するはずです。
awk '{$1=$1}1' filename | awk ' !x[$0]++'
最初のawkコマンドはファイル内のすべての先行スペースを削除し、2番目のawkコマンドは一意の要素のみを印刷します。
答え3
削除したい場合みんな重複(繰り返し空の行を含む)
awk '{if ($1 in a) next; a[$1]=$0; print}' test.txt
繰り返し空の行を維持するには
awk '/^$/ {print; next} {if ($1 in a) next; a[$1]=$0; print}' test.txt
答え4
コマンドの使用unique
例karrick/unique
:
$ cat test.txt | tr -d ' ' | unique
abc
def
pqr
xyz
efg