서로 다른 열이 있는 N개 행을 단일 열로 바꿉니다.

서로 다른 열이 있는 N개 행을 단일 열로 바꿉니다.

내 데이터 샘플은 다음과 같습니다.

1 2 3 4 5
4 5 6 7 9 9 0
1 2 3 4
1 8 7 6 9

나는 그것을 다음과 같이 바꾸고 싶습니다 :

1
2
3
4
5
4
5
6
7
9
9
0
1
2
3
4
1
8
7
6
9

답변1

입력 라인의 경우공백 없음이것을 사용하십시오 :

fold -1 data_sample.txt

- 지정된 너비에 맞게 각 입력 줄을 줄 바꿈합니다.

이 경우 너비는 -1옵션으로 지정된 1열입니다.


당신이 입력하면공백이 있습니다, 그러나 이를 생략하려면 다음을 사용하십시오.

grep -o '\S' data_sample.txt

\S- 공백이 아닌 문자와 일치합니다.

-o- 일치하는 각 부분을 별도의 줄에 인쇄합니다.

답변2

rs(모양 변경) 유틸리티를 사용하십시오 .

$ rs 0 1 < data
1
2
3
4
5
4
5
6
7
9
9
0
1
2
3
4
1
8
7
6
9

row출력 배열 형태는 col다음과 같이 선택적 인수와 매개변수에 의해 결정됩니다.

If only one of them is a positive integer, rs computes a value for the 
other which will accommodate all of the data.

이 경우 0양의 정수가 없으므로 모든 필드를 단일 열에 넣도록 행 수를 선택합니다.

답변3

tr다음 명령을 사용할 수 있습니다 .

tr -s ' ' '\n' < infile

이를 수행하는 다른 옵션은 다음과 같습니다.

sed -e $'s/\s*/\\\n/g' infile

또는:

sed 's/\s*/\
/g' infile.txt

또는 일부 sed구현에서는 다음을 사용합니다.

sed 's/\s*/\n/g' infile

또는 다음을 통해 gawk(마지막 빈 줄이 마음에 들지 않는 경우):

awk -v RS='[[:blank:]]*' '1' infile

또는 bash:

#!/bin/bash
while read -r line; do 
    echo "${line// \+/$'\n'}";
done < infile

또는 배열을 읽은 후 다음을 수행하십시오 printf.

#!/bin/bash
while read -a fields; do
    printf "%s\n" "${fields[@]}";
done < infile

답변4

awk '{ for(i=1;i<=NF;i++) print $i; }' input

또는 빈 줄을 유지해야 하는 경우:

awk '/^$/ { print; }; { for(i=1;i<=NF;i++) print $i; }' input

관련 정보