파일에서 입력을 받아 숫자의 행과 열이 정렬된 순서로 포함된 목록을 생성하려고 합니다. 이는 나중에 인쇄 가능한 문서를 생성하는 데 사용되므로 현재 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의 배수여야 하며 나머지 항목은 모두 삭제됩니다.