下記のファイルがあります。 Col1 / Field 1には常に冗長データがあり、残りのフィールドはそうである場合とそうでない場合がありますが、他の列については心配しません。必要なのは、印刷する必要がある重複データがある場合だけです。 col1 のスペースとフィールド 1 の値は、行内の値が繰り返されないようにソートされます。
COL1 | COL2 | COL3
----------------------
A1 | 98 | P
A1 | 98 | P
A1 | 98 | P
B1 | 98 | P
B1 | 98 | P
B1 | 98 | P
C1 | 98 | P
C1 | 98 | P
C1 | 98 | P
変換が必要で、awk/sed は col1 にのみ適用できます。 (awk / sed / cutを使用した後の出力は次のようになります。)
COL1 | COL2 | COL3
----------------------
A1 | 98 | P
| 98 | P
| 98 | P
B1 | 98 | P
| 98 | P
| 98 | P
C1 | 98 | P
| 98 | P
| 98 | P
awk '!x[$1]++' ファイル <-- 行全体を削除
awk/sed/cut 何でも可能です。 50行のコードを作成し、最終段階で完成しました。
答え1
$ awk -F '|' 'BEGIN { OFS=FS } { c1 = $1 } c1 == prev { gsub(".", " ", $1) } { prev = c1; print }' file
COL1 | COL2 | COL3
----------------------
A1 | 98 | P
| 98 | P
| 98 | P
B1 | 98 | P
| 98 | P
| 98 | P
C1 | 98 | P
| 98 | P
| 98 | P
プログラムは区切り入力データをawk
読み取り、区切り出力データを書き込みます。|
|
入力の各行について最初の列を抽出し、前のc1
最初の列と比較しますprev
。同じ場合、最初の列の値は空白で上書きされます。つまりgsub()
、列幅が変更されるのを防ぎます。次に、レコードの「前の列」を値に更新し、c1
(変更された可能性がある)行を印刷します。