awk를 통해 파일 분할

awk를 통해 파일 분할

이것은 "\t"로 구분된 세 개의 열을 포함하는 내 파일입니다. 두 번째 열의 구분 기호는 비어 있습니다.

       1   a b    tom
       2   a b c  sim
       3   a      mary
       4   o l    shey   
       5   c      bob

두 번째 열에 여러 요소가 포함된 첫 번째 파일을 가져오고 싶습니다.

       1   a b    tom
       2   a b c  sim
       4   o l    shey 

그런 다음 이와 같은 두 번째 파일을 얻고 싶습니다.

       1    a     tom
       1    b     tom
       2    a     sim
       2    b     sim
       2    c     sim
       4    o     shey
       4    l     shey

사실 나도 시도해봤어

awk -F\\t 'BEGIN {OFS=FS} {n=split($2,aa," ");for (i=1;i<=n;i++) {$2=aa[i]; printf "%s\n" $0 }}'

그러나 그것은 쓸모없는 것 같습니다. 몇 가지 제안을 해주실 수 있나요? 감사해요.

답변1

$ awk 'NF>3' file
       1   a b    tom
       2   a b c  sim
       4   o l    shey

$ awk -v OFS='\t' 'NF>3{for (i=2;i<NF;i++) print $1, $i, $NF}' file
1       a       tom
1       b       tom
2       a       sim
2       b       sim
2       c       sim
4       o       shey
4       l       shey

코드가 작동하지 않는 이유에 대해 가장 명백한 문제는 공백으로 구분되어 있다고 말하고 표시할 때 쉼표로 구분하려고 split($2,aa,",")하는 것 입니다.$2

답변2

두 번째 단계에서는 밀러의 대체 솔루션과 필드 2의 공백을 기반으로 레코드를 선택하는 아이디어를 사용합니다(필드 2에 두 개 이상의 요소가 있는 경우에만 공백이 발생한다고 가정).

awk -F'\t' '$2 ~ / /' |
tee out1 | 
mlr --tsv -N nest --explode --values --across-records --nested-fs " " -f 2 >out2

관련 정보