Linux 시스템에 쉼표로 구분된 3개의 열이 있는 파일이 있습니다. 네 번째 행마다 새 열을 시작하고 싶습니다.
입력하다:
col1,col2,col3
1,disease1,high
1,disease2,low
1,disease3,high
col1,col2,col3
2,disease1,low
2,disease2,low
2,disease3,high
col1,col2,col3
3,disease1,low
3,disease2,low
3,disease3,low
예상 출력:
col1,col2,col3,col1,col2,col3,col1,col2,col3
1,disease1,high,2,disease1,low,3,disease1,low
1,disease2,low,2,disease2,low,3,disease2,low
1,disease3,high,2,disease3,high,disease3,low
즉, 나는 4줄의 출력을 원하며, 각 줄은 쉼표로 연결된 네 번째 입력 줄의 결과입니다.
답변1
그리고 awk
:
awk '{a[NR%4] = a[NR%4] (NR<=4 ? "" : ",") $0}
END{for (i = 1; i <= 4; i++) print a[i%4]}' < input.txt
답변2
paste
4개의 라인을 하나로 결합하고 이를 read
4개의 변수로 결합한 후 각 변수를 출력 라인에 추가해 보십시오.
paste -s -d" \n" file |
{ while read A B C D
do L1="$L1$DL$A"
L2="$L2$DL$B"
L3="$L3$DL$C"
L4="$L4$DL$D"
DL=,
done
printf "%s\n" "$L1" "$L2" "$L3" "$L4"
}
col1,col2,col3,col1,col2,col3,
1,disease1,high,2,disease1,low,
1,disease2,low,2,disease2,low,
1,disease3,high,2,disease3,high,
편집하다:또는 더 간단하게는 다음이 필요하지 않습니다 paste
.
while read A && read B && read C && read D
do L1="$L1$DL$A"
L2="$L2$DL$B"
L3="$L3$DL$C"
L4="$L4$DL$D"
DL=,
done < file
printf "%s\n" "$L1" "$L2" "$L3" "$L4"