これは私のデータセットです。
col1,col2,col3
a,b,c
a,d,f
d,u,v
f,g,h
d,u,g
x,t,k
予想出力:
f,g,h
x,t,k
選択基準:
何かが複数回発生すると、col1
関連するすべての行が削除されます。
sort
uniq
Linuxまたは他の方法を使用してこの問題を解決できますか?
ベストアンサー1
これは「バッファされていません」(1) 2段階の方法ですawk
(通常のファイルのみ)。
awk -F',' 'NR==FNR{cnt[$1]++;next} FNR>1&&cnt[$1]==1' input.csv input.csv
これはファイルを2回処理するため、コマンドラインでパラメータとして2回宣言します。
- このパラメータは
-F','
フィールド区切り文字をに設定します,
。 - 最初のステップでは、
NR
グローバル行カウンターがFNR
ファイルごとの行カウンターと等しい場合、列 1 の各値が配列で見つかった頻度を記録しますcnt
(その値を「配列索引」として使用)、すぐに処理に移動します.次の行。 - 2番目のパスでは、最初の列の現在値の発生カウンタが正確に1であるかどうか、ファイルの行番号が1より大きいかどうかを確認します(ヘッダーをスキップする)。これが真の場合のみ、現在の行が印刷されます。これは、現在行を印刷するように指示するルール
awk
ブロックの外側の式構文を利用します。true
awk
(1)私のコメントへの回答バッファリングされていない解決策は、ファイルの一部のデータを一時的にRAMに保存するため、引用符で囲みます。するRAM使用量が付属しています。ただし、ファイルの内容をそのまま保存するわけではありません。またRAM内の他のスクロール保持データ(ここでは私実用的な意味では、「バッファリング」を考えます。)