![탭으로 구분된 열을 출력하는 간단한 명령이 있습니까?](https://linux55.com/image/25403/%ED%83%AD%EC%9C%BC%EB%A1%9C%20%EA%B5%AC%EB%B6%84%EB%90%9C%20%EC%97%B4%EC%9D%84%20%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94%20%EA%B0%84%EB%8B%A8%ED%95%9C%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
echo -e "var1\tvar2\t\var3\tvar4" > foo
예를 들어, 출력이 포함된 파일( 로 생성됨)이 있습니다 .
$ cat foo
case elems meshing nlsys
uniform 2350 0.076662 2.78
non-conformal 348 0.013332 0.55
scale 318 0.013333 0.44
smarter 504 0.016666 0.64
submodel 360 .009999 0.40
unstruct-quad 640 0.019999 0.80
unstruct-tri 1484 0.01 0.88
vim
나는 다음과 같은 출력을 선호합니다(여기서는 sum 을 사용합니다 :set tabstop=14
).
case elems meshing nlsys
uniform 2350 0.076662 2.78
non-conformal 348 0.013332 0.55
scale 318 0.013333 0.44
smarter 504 0.016666 0.64
submodel 360 .009999 0.40
unstruct-quad 640 0.019999 0.80
unstruct-tri 1484 0.01 0.88
cat
$ tabs=15
Bash에서 사용 하면 동일한 기능을 얻을 수 있습니다(이 항목 참조).질문). 자동으로 포맷을 할 수 있는 프로그램이 있나요? tabs
파일을 읽기 전에 값을 시험해보고 싶지 않습니다 .cat
답변1
나는 보통 column
이 목적으로 이 프로그램을 사용합니다. 이 프로그램은 bsdmainutils
데비안에서 다음과 같은 패키지로 제공됩니다.
column -t foo
산출:
case elems meshing nlsys
uniform 2350 0.076662 2.78
non-conformal 348 0.013332 0.55
scale 318 0.013333 0.44
smarter 504 0.016666 0.64
submodel 360 .009999 0.40
unstruct-quad 640 0.019999 0.80
unstruct-tri 1484 0.01 0.88
column(1)
내 시스템 에서 가져온 내용 :
...
-t Determine the number of columns the input contains and create a
table. Columns are delimited with whitespace, by default, or
with the characters supplied using the -s option. Useful for
pretty-printing displays.
...
답변2
여러 옵션:
var1=uniform var2=2350 var3=0.076662 var4=2.78
printf '%-15s %-10s %-12s %s\n' \
case elems messing nlsys \
"$var1" "$var2" "$var3" "$var4"
printf '%s\t%s\t%s\t%s\n' \
case elems messing nlsys \
"$var1" "$var2" "$var3" "$var4" |
expand -t 15,25,37
printf '%s\t%s\t%s\t%s\n' \
case elems messing nlsys \
"$var1" "$var2" "$var3" "$var4" |
column -t -s $'\t'
열은 비표준 명령이며 일부 구현/버전은 -s 옵션을 지원하지 않습니다. 입력을 기준으로 열 너비를 계산하지만 이는 모든 입력이 입력될 때까지 표시를 시작할 수 없음을 의미합니다. $'...'
ksh93 구문을 zsh 및 bash에서도 사용할 수 있습니까?
zsh 사용:
values=(
case elems messing nlsys
"$var1" "$var2" "$var3" "$var4"
)
print -arC4 -- "$values[@]"
답변3
이를 수행할 수 있는 또 다른 도구는 tsv-pretty
다음에서 제공됩니다.eBay의 TSV 유틸리티(면책조항: 저는 저자입니다). 소수점에 숫자 필드를 정렬하려면 추가 단계가 필요합니다. 예를 들어:
$ tsv-pretty foo
case elems meshing nlsys
uniform 2350 0.076662 2.78
non-conformal 348 0.013332 0.55
scale 318 0.013333 0.44
smarter 504 0.016666 0.64
submodel 360 .009999 0.40
unstruct-quad 640 0.019999 0.80
unstruct-tri 1484 0.01 0.88
여러 가지 서식 옵션이 있습니다. 예를 들어 -u
제목에 밑줄을 추가하고 -f
필드의 부동 소수점 숫자 형식을 유사하게 지정하여 가독성을 높입니다.
$ tsv-pretty foo -f -u
case elems meshing nlsys
---- ----- ------- -----
uniform 2350 0.076662 2.78
non-conformal 348 0.013332 0.55
scale 318 0.013333 0.44
smarter 504 0.016666 0.64
submodel 360 0.009999 0.40
unstruct-quad 640 0.019999 0.80
unstruct-tri 1484 0.010000 0.88
더 많은 정보를 원하시면 방문해주세요tsv - 예쁜 참고자료.
답변4
또 다른 빠르고 더러운 방법은 대부분의 *nix 시스템에 tabs
포함되어 설치되는 이 명령을 사용하는 것입니다 .ncurses
개인적으로 저는 이 솔루션이 매우 빠르고 쉽게 대부분 올바른 결과를 얻을 수 있다는 점에서 좋아합니다.
@sebastian이 제공한 탭으로 구분된 파일 예제를 기반으로 합니다.
빨리 달려:
tabs 1,20,35,50
완료되면 탭을 표준 하드웨어 기본값으로 복원하는 것이 좋습니다.
tabs -8
man tabs
(예, 탭을 -8로 명시적으로 설정하는 것이 이상하다고 생각합니다. 그러나 이것이 제가 본 모든 터미널의 하드웨어 기본값이라는 내용을 읽고 얻을 수 있는 최고의 솔루션입니다 .)
보다 완전한 솔루션을 구축하려면 stty size
터미널 너비 확인을 사용하고 가변 길이 필드의 너비를 터미널 너비의 백분율로 계산하고 애플리케이션 방식으로 긴 열을 잘라낼 수 있습니다.