awk를 사용하여 테이블 형식 변경

awk를 사용하여 테이블 형식 변경

아래와 같이 매우 긴 테이블을 많이 다시 포맷해야 합니다.

원본 형식:

John Smith,Jones,Taylor
Janet Williams,Brown,Wilson

필수 형식:

John Smith
John Jones
John Taylor
Janet Williams
Janet Brown
Janet Wilson

어떻게 해야 하나요?

답변1

그리고 awk:

awk -F"[ ,]" '{for(i=2;i<=NF;i++){print $1,$i;}}' file
  • -F"[ ,]": 구분 기호는 공백과 쉼표로 설정됩니다. 이제 $1이름에 성을 추가하고 $2마지막 필드에 성을 추가했습니다.
  • for(i=2;i<=NF;i++): 필드 2부터 시작하여 각 필드를 반복합니다.
    • print $1,$i;:이름을 기재한 다음 성을 기재하십시오.

산출:

John Smith
John Jones
John Taylor
Janet Williams
Janet Brown
Janet Wilson

답변2

노력하다

awk ' { n=split($2,A,",") ;
    for (i=1;i<=n;i++) printf "%s %s\n",$1,A[i] ;
} ' file

어디

  • split($2,A,",")두 번째 필드는 쉼표(,)로 구분됩니다.
  • n= 계산할 수 있다
  • for( )반복됩니다
  • A[i]현재 이름(또는 성)입니다.
  • printf "%s %s\n",$1,A[i]함께 인쇄하세요.

답변3

그리고sed:

sed ':1;s/,/\n/;T;P;s/\S*\n//;t1' file
  • :1반환 지점 표시
  • s/,/\n/ sn첫 번째 쉼표를 ewline으로 바꿉니다.
  • T교체가 수행되지 않은 경우(줄에 더 이상 쉼표가 없음) 스크립트 끝으로 전달됩니다.
  • Pn처음부터 끝까지 줄 인쇄
  • s/\S*\n//\S*ewline을 사용하여 단어( 비어 있지 않은 기호)를 제거하세요.n
  • t1교체가 성공한 경우 - 반환 1지점

이상POSIX'리

sed ':1;s/,/\n/;/\n/P;s/\S*\n//;t1' file

관련 정보