정수 행을 다중 열 출력으로 변환

정수 행을 다중 열 출력으로 변환

파일에서 입력을 받아 숫자의 행과 열이 정렬된 순서로 포함된 목록을 생성하려고 합니다. 이는 나중에 인쇄 가능한 문서를 생성하는 데 사용되므로 현재 Excel에서 수동으로 사용하는 단계를 대체할 수 있습니다.

원시 데이터는 1에서 20000 사이의 정수입니다. 가정:

1 2 3 4 5 6 7 8 ...

또는

1
2
3
4
5

목록은 숫자순으로 정렬되며 공백으로 구분됩니다. (선택 사항) 목표 달성에 도움이 되는 경우 \n 또는 기타 항목으로 값을 구분할 수 있습니다.

열 수는 7이어야 하지만 나중에 직접 변경할 수 있을 가능성이 높습니다.

내가 원하는 출력:

1 40 80
2 41 81 
3 42 82 
4 43 83

unix.se 문제, SF에 대한 기타 제안, 열 매뉴얼 페이지, fml 등을 읽는 동안 이것을 알아내기 위해 시도한 것입니다.

for value in $(cat /tmp/list); do      printf "%-8s\n" "${value}"; done|column -x

출력(단순화, 탭 사이):

1 2 3 4
5 6 7 8
...

다음으로 시도해 볼 것은 Serverfault 제안입니다.

cat /tmp/list |fmt |column -t

산출:

1    2    3    4    5 
6    7    8    9    10

원래의 해결책뿐만 아니라 (도움이 되겠지만) 이 과정을 이해하면서 문제가 무엇인지 이해하고 싶습니다.

답변1

echo {1..20000} | tr " " "\n" | sort -n | pr -T3 -s" " -l 6667

산출:

1 6668 13335
2 6669 13336
3 6670 13337
4 6671 13338
5 6672 13339
6 6673 13340
7 6674 13341
8 6675 13342
9 6676 13343
10 6677 13344
11 6678 13345
.
.
.

파일로 테스트하려면:

tr " " "\n" < file | sort -n | pr -T3 -s" " -l 6667

20,000개의 숫자가 모두 한 행에 있는지, 한 열에 있는지는 중요하지 않습니다.

답변2

입력이 개행으로 구분된 숫자로 구성되어 있다고 가정합니다. 예를 들면 다음과 같습니다.

1
2
3
...

sed열에 넣는 간단한 스크립트는 다음과 같습니다 .

$ sed -n '{N;N;N;N;N;N;s/\n/\t/g;p}'

스크립트가 행을 발견하면 N;N;N;N;N;N버퍼에 6개 행( )을 더 읽고 버퍼의 각 개행 문자를 탭 문자( s/\n/\t/g)로 대체한 다음 버퍼( p)를 인쇄합니다. 결과:

1    2    3    4    5    6    7
8    9    10   11   12   13   14
...

노트:입력의 행 수는 7의 배수여야 하며 나머지 항목은 모두 삭제됩니다.

관련 정보