1

私はフックまたは詐欺師によって解決したこの問題に出くわしました。しかし、正確な解決にはあなたの助けが必要です。の初心者なawk/sedので、1 つのライナー (あると確信しています) またはawkスクリプトでは解決できませんでしたが、多くのパイプを使用することはできました。

質問は次のとおりです。

次のようなエントリを含む大きな .csv ファイルがあります。

ファイル (スペース区切り)

$ cat file
a d e r None
c f g r a
c f g r None
d a d e c
d a d e None
g f r t None
g f t r None
k f r e d
r e t y None
s c d er d
g f r t 4

重複はありません。しかし、注意深く見ると、列 1、2、3、4 に繰り返しのエントリがあり、唯一の変更は'None'. したがって、1、2、3、4 フィールドで繰り返され、None5 列目にある行 (レコード) を削除する必要があります。

ここに私が書いたコードがありますが、うまくいきましたが、誰もお勧めしません:

awk '{print $5,$4,$3,$2,$1}' file | sed 's/None/zzz/g' | sort | awk '!array[$2,$3,$4,$5]++' | sed 's/zzz/None/g'

これが私が得た出力であり、期待しています。

4 t r f g
a r g f c
c e d a d
d e r f k
d er d c s
None r e d a
None r t f g
None y t e r

Noneで置き換える目的はzzz、並べ替えの後、行が最後に表示され、awk残りの列から重複の 2 番目の出現を削除します。同じことが、列の順序を反転させ、再度反転させる理由です。選別。

助けていただければ幸いです。ありがとう!

4

1 に答える 1