转换数据并使用 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]++' file <-- 正在删除整行

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并打印(可能已修改的)行。

相关内容