데이터 변환 및 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(수정되었을 수 있는) 행을 인쇄합니다.

관련 정보