아래와 같이 매우 긴 테이블을 많이 다시 포맷해야 합니다.
원본 형식:
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/
s
n
첫 번째 쉼표를 ewline으로 바꿉니다.T
교체가 수행되지 않은 경우(줄에 더 이상 쉼표가 없음) 스크립트 끝으로 전달됩니다.P
n
처음부터 끝까지 줄 인쇄s/\S*\n//
\S*
ewline을 사용하여 단어( 비어 있지 않은 기호)를 제거하세요.n
t1
교체가 성공한 경우 - 반환1
지점
이상POSIX'리
sed ':1;s/,/\n/;/\n/P;s/\S*\n//;t1' file