이와 같은 열이 아닌 입력을 어떻게 열 수 있습니까 ls
?
ls
최적화된 테이블은 행당 최소 너비로 생성됩니다. 예:
ls
2 dsao file with space with
5 e g wsdl-rubo-6cb0f1a9086e80c
d file leading space
그러나 출력을 (예: 한 줄에 있는 각 파일) 입력하면 column
각 줄이 동일한 너비로 채워지므로 화면 너비에 맞습니다.
for i in *; do echo "$i"; done | column
2 file with space
5 g
d leading space
dsao with
e wsdl-rubo-6cb0f1a9086e80c
file
(여기에서는 예제와 동일한 출력을 생성하기 위해 파일 목록을 사용하고 있습니다. 결국 다른 항목을 나열하기 위해 이와 같은 솔루션을 찾고 있습니다.)
가변 열 너비를 사용하여 출력을 열 열로 표시하는 방법은 무엇입니까?
답변1
이 질문을 해주신 @rubo77에게 감사드립니다. 훌륭한 연습이 됩니다. 나에게 이것은 영어가 나쁜 속도를 나타내는 것과 거의 같은 실수를 하는 것입니다. 여기의 알고리즘 자체는 매우 간단함에도 불구하고 재미있고 빠릅니다.
[최종 수정: 다음으로 이동됨https://github.com/jthill/columnate/blob/master/columnate, 버그 수정 및 행 우선순위 구현. ]
답변2
출력에 가까운 것 ls
:
for i in *; do echo -en "${i}\t"; done; echo
답변3
위의 @jthill 솔루션처럼 행당 최소 너비를 사용하지 않지만 주의할 점도 있습니다.
autogen
문제를 완전히 해결하는 명령을 설치했습니다 homebrew
.columns
- 홈브류를 설치합니다:https://brew.sh/
brew install autogen
시험용
spit() { for i ; do echo "$i"; done; }
spit 1 2222222222222222 3 4 5 6 7777777777777777 8 $(seq 10 30) | columns
산출:
1 2222222222222222 3 4
5 6 7777777777777777 8
10 11 12 13
14 15 16 17
18 19 20 21
22 23 24 25
26 27 28 29
참고: apt 패키지로도 충분할 수 있습니다.
apt install autogen
답변4
임시 폴더를 만들고 열이 아닌 입력의 각 문자열 항목에 대해 빈 파일을 만든 다음 열 출력에 사용할 수 있습니다 ls
.
예:
mkdir -p /tmp/col
IFS=''
echo "something_very_long-something_very_long-something_very_long
output with space
space-at-beginning
3
4
5
6
7
8
9"|while read; do
touch /tmp/col/"$REPLY"
done
cd /tmp/col/
ls
rm /tmp/col/*
산출:
3 7 something_very_long-something_very_long-something_very_long
4 8 ' space-at-beginning'
5 9
6 'output with space'