아래에 제공된 파일이 있습니다. 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
(수정되었을 수 있는) 행을 인쇄합니다.