최소 너비로 항목 목록을 열화하는 방법은 무엇입니까?

최소 너비로 항목 목록을 열화하는 방법은 무엇입니까?

이와 같은 열이 아닌 입력을 어떻게 열 수 있습니까 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

  1. 홈브류를 설치합니다:https://brew.sh/
  2. 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'

관련 정보