단일 열의 데이터를 세 열에 배포하는 방법은 무엇입니까?
입력하다:
A
B
C
A
B
C
.
.
.
나는 다음과 같은 결과를 원합니다 :
A B C
A B C
A B C
.
.
.
답변1
입력 데이터가 질문에 작성된 파일과 정확히 같다면 다음과 같이 사용할 file
수 있습니다 .paste
$ paste - - - <file
A B C
A B C
. . .
출력에는 필드 구분 기호로 탭 문자가 있지만 -d
다음 옵션을 사용하여 변경할 수 있습니다.
$ paste -d ' ' - - - <file
A B C
A B C
. . .
paste
세 개의 대시는 입력에서 한 번에 한 행씩 채워지는 출력의 열에 해당합니다.
시스템을 확인하십시오 man paste
.
답변2
그리고 xargs
:
$ xargs -n3 < file
A B C
A B C
. . .
각 명령줄은 최대 3개의 매개변수를 출력합니다. 실행할 명령을 생략했습니다. echo
누락된 경우 기본적으로 이 명령이 사용됩니다. 그것은 동일합니다
xargs -n3 echo < file
답변3
매우 "골프" 형식에서는 다음(GNU) awk
명령을 사용할 수 있습니다.
awk '{cache=(n%3) ? cache" "$0 : $0; n++; if (n % 3 == 0) {print cache; cache="";}}' inputfile.txt
더 읽기 쉬운 형태로:
awk '{if (n%3==0) cache=$0; else cache=cache" "$0; n++; if (n%3==0) {print cache; cache="";}}' inputfile.txt
프로그램 awk
은 내부 행 카운터 n
(암시적으로 0으로 초기화됨, 중요)와 cache
세 행의 내용을 " "
공백( )으로 구분하여 누적하고 세 행마다 캐시를 "플러시"하는 내부 캐시 변수를 사용합니다.
3
다른 수의 행과 "행 토큰 구분 기호"가 필요한 " "
위치를 교체하여 필요에 맞게 조정할 수 있습니다 .cache=cache" "$0