다음과 같은 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