ファイルに逆行がある場合にファイルからその行を削除するコマンド

ファイルに逆行がある場合にファイルからその行を削除するコマンド

次のCSVがあると言えます。

1,20
1,13
20,1

1,20がすでにcsvにあるため、20,1を削除する必要があります。私の考えは、リバースコンテンツがすでにcsvにあることを1行ずつ確認することですが、シェルスクリプトを使用してこれを行う方法がわかりません。

編集:2つの同じ数字を同じ行に含めることはできません。たとえば、20,20 は決して表示されません。

ベストアンサー1

これを合理的な速度で達成するには、ある種のハッシュテーブルが必要です。従来はこれを行いますawkが、bash連想配列を含むすべての最新のスクリプト言語でこれを実行できます。

awk 'BEGIN{FS=","}                                                                   
{                                                                               
   rev=$NF; for(i=NF-1;i>0;i--) {rev = rev "," $i}                                                                         
   if (!seen[rev]) { print }                                                    
   seen[$0]=1                                                               
}'

これはrevに逆行を構成し、まだ見たことがない場合は逆行を印刷してから、見たものを記録します。

おすすめ記事