データ変換とsed / awkの使用

データ変換とsed / awkの使用

下記のファイルがあります。 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(変更された可能性がある)行を印刷します。

おすすめ記事