다음 형식의 데이터가 포함된 큰 텍스트 파일이 있습니다.
1
2
3
4
5
6
7
8
9
10
나는 그것을 다음과 같이 변환하려고합니다 :
1 2 3
4 5 6
7 8 9
10
나는 시도했다 awk
:
'{ if (NR%2) {printf "%40s\n", $0} else {printf "%80s\n", $0} }' file.txt
답변1
답변2
이 columns
도구는 다음을 수행할 수 있습니다.
$ seq 10 | columns -W 16 -c 3
1 2 3
4 5 6
7 8 9
10
-W 16
선 너비를 더 작게 설정하면 됩니다.
columns
Unix 표준 도구가 아닙니다. 그것은 일부이다GNU 자동 생성.
보다 일반적인 column
명령의 일부 버전에서는 열 수를 설정하는 데 사용할 수 있지만 -c
최신 버전에서는 행 너비를 문자 수로 설정하도록 의미가 변경된 것 같습니다.
또한 pr
mpez0이 의견에서 제안한 대로:
$ seq 10 | pr -aT3
1 2 3
4 5 6
7 8 9
10
-aT3
응 줄임말 --across --omit-pagination --columns=3
.
pr
-T
/는 --omit-pagination
GNU에만 적용되는 것처럼 보이지만 coreutils와 POSIX에도 있습니다.
답변3
다음과 같은 것을 시도해보세요
seq 1 10 | awk '{printf "%40s", $0} !(NR%3) {printf "\n"}'
1 2 3
4 5 6
7 8 9
10
답변4
그러면 각 입력 줄의 문자열 너비가 40, 80 및 120 사이에서 번갈아 표시됩니다.
awk '{ m = (NR-1) % 3; i = (m+1) * 40; printf "%*s\n", i, $0 }'
변하기 쉬운:
m
- 줄 번호 모듈로 3(예:0
,1
,2
반복)i
- 주어진 m 값에 대한 들여쓰기
다른 지침 없이 printf
입력의 각 줄이 자체 출력 줄로 형식화되고 각 줄이 사용 가능한 공간에 오른쪽 정렬되도록 사용자 고유의 형식을 사용하여 진행합니다.
예제와 같이 행당 40열 항목 3개를 원하는 경우 코드 대신 이 옵션을 사용할 수 있습니다(텍스트를 왼쪽 정렬하려면 이 옵션으로 변경) 40s
.-40s
awk '{ printf "%40s", $0 } !(NR % 3) { printf "\n" }'