필드에서 데이터를 가져와 새 행에 삽입

필드에서 데이터를 가져와 새 행에 삽입

다음과 같은 TSV가 있습니다.

1   2   3   4,5,6   a
1   2   3       b
2   7   9   1,2 c   
0   7   9   1,6,7,7 d

네 번째 열을 추출하고 쉼표로 구분된 값을 가져와서 자체 행에 넣어야 합니다. 열에 값이 2개 이상 있으면 자체 행을 지정해야 합니다. 예를 들어:

1   2   3   4   a
            5
            6
            7       
1   2   3       b
2   7   9   1   c   
            2           
0   7   9   1   d
            6
            7
            7

나는 시도했다:

awk -F'\t' '{split($4,a,",");for(i in a)if(!seen[a[i]]++)print a[i]}' /report/temp2.tsv > /report/temp3.tsv

하지만 나머지는 그리워요...

답변1

Awk해결책:

awk 'NF == 4{ $4 = OFS $4 }
     NF == 5 && $4 ~ /,/{
         len = split($4, a, ",");
         sub(/,.+/, "", $4); print $0;
         for(i = 2; i <= len; i++) print OFS OFS OFS a[i];
         next
    }1' OFS='\t' file

산출:

1   2   3   4   a
            5
            6
1   2   3       b
2   7   9   1   c
            2
0   7   9   1   d
            6
            7
            7

관련 정보