웹사이트 검색

Linux에서 열 명령을 사용하는 다양한 방법


CSV 파일로 작업하고 구조화된 표 형식으로 출력을 생성해야 하는 상황에 처해본 적이 있습니까? 최근에 나는 적절한 구조가 아닌 파일에 대한 데이터 정리 작업을 하고 있었습니다. 각 열 사이에 공백이 너무 많아서 데이터베이스에 푸시하려면 이를 CSV 형식으로 변환해야 합니다. CSV 형식으로 출력을 정리하고 생성한 후 내 출력이 CSV 파일의 데이터 무결성을 확인하기에 시각적으로 매력적이지 않습니다. 이때 “Column” 명령이 유용하게 사용됩니다.

맨페이지에 따르면 column 명령은 "columnate listed "입니다. 간단히 말해서, 은 소스 파일의 구조에 따라 출력을 형식(행 및 필드)으로 지정할 수 있는 간단한 유틸리티입니다. column 명령은 util-linux 패키지의 일부입니다.

여기서 주목해야 할 중요한 점은 column 명령이 Debian 기반 배포판과 Rhel 기반 배포판에서 다르게 동작한다는 것입니다. 그 이유는 Debian 기반 배포판이 util-linux 대신 bsdmainutils의 "column"을 사용하기 때문입니다. column 명령의 업스트림 버전은 bsdmainutils 패키지보다 최신 버전입니다. 이에 대해 자세히 알아보려면 버그 보고서를 살펴보세요.

dpkg -S $(which column)

시연을 위해 저는 CentOS 7을 사용하고 있으며 UbuntuCentOS 7 사이의 다양한 옵션을 보여드리겠습니다. 버전을 확인하려면 다음 명령을 실행하세요. 이 명령은 util-linux 패키지 버전도 표시합니다.

column --version  # will not work in Debian/ubuntu

아래 명령을 실행하여 util-linux 버전을 확인할 수도 있습니다.

rpm -qa | grep -i util-linux   # Redhat,Centos,Fedora,Amazon Linux
dpkg -l | grep -i util-linux    # Ubuntu

column 명령을 사용하기 전에 매뉴얼 페이지에서 해당 옵션을 살펴보는 것이 좋습니다.

man column

파일 내용을 표 형식으로 나열

column 명령은 -t 플래그와 함께 파일 이름을 인수로 전달하여 테이블을 생성할 수 있습니다. 입력 파일로 /etc/passwd를 사용하고 있습니다.

column -t /etc/passwd

위의 이미지를 보면 이것이 우리가 예상한 것과 다르다고 생각할 수도 있고 출력이 이상하게 보일 수도 있습니다. 예! 당신 말이 맞아요. 은 표를 생성할 때 공백을 기본 구분 기호로 고려합니다. 이 동작은 사용자 지정 구분 기호를 전달하여 재정의할 수 있습니다.

맞춤 구분 기호

사용자 정의 구분 기호는 다양한 작업 옵션을 제공합니다. 사용자 정의 구분 기호를 만들려면 -s 플래그 뒤에 구분 기호를 사용하세요. 이제 /etc/passwd 파일을 분할하기 위한 구분 기호로 “: ”를 사용하겠습니다.

column -s ":"  -t /etc/passwd

위의 이미지를 보면 테이블의 형식이 훌륭하고 구조화되어 있습니다. util-linux 버전 2.23부터 -s 옵션이 욕심을 부리지 않도록 변경되었습니다.

이제 Ubuntu에서 동일한 명령을 실행하면 결과가 매우 좋아질 것입니다. 이는 Ubuntucolumn 명령(bsdmainutils)이 인접한 여러 단어를 단일 단어로 처리하기 때문입니다.

column -s ":"  -t /etc/passwd

이 동작을 극복하려면 -n 플래그를 사용하십시오.

column -t -s ":" -n /etc/passwd             # Only on Debian/Ubuntu

파일 출력에서 흰색 빈 줄 무시

입력 파일에 빈 줄이 있으면 기본적으로 열 명령은 이를 무시합니다. CSV 형식의 입력 파일을 확인하고 모든 줄 사이에 빈 줄을 추가했습니다. 이제 이 입력 파일을 사용하여 이전에 했던 것처럼 테이블을 생성해 보겠습니다.

column -t -s ";" dummy.txt

위 이미지에서 입력 파일 dummy.txt에 빈 줄이 있고 테이블을 만들려고 하면 빈 줄이 무시되는 것을 볼 수 있습니다.

참고: 이는 column 명령의 "bsdmainutils/util-linux" 변형 모두에 대한 기본 동작입니다. 그러나 (bsdmainutils)에는 -e 플래그를 전달하여 이 동작을 재정의하는 옵션이 있습니다.

column -e -t -s "," dummy.txt        # Only on Debian/Ubuntu

위 이미지에서 테이블의 형식이 올바르게 지정되고 빈 줄이 무시되지 않는 것을 볼 수 있습니다.

파일 출력 구분 기호

기본적으로 두 개의 공백이 출력 구분 기호로 사용됩니다. 이 동작은 -o 플래그를 전달하여 무시할 수 있습니다. (bsdmainutils)에서는 출력 구분 기호 옵션을 사용할 수 없습니다.

column -t -s "," -o "||" dummy.txt	# Only on Rhel based distro

파일 행을 열로 변환

-x 플래그를 사용하면 행을 열로 변환할 수 있습니다. 이 동작은 열 명령의 rhelubuntu 변형 모두에서 동일합니다. 이는 awk 또는 열 명령을 통해 특정 필드를 가져온 다음 이를 CSV 파일의 헤더로 변환해야 할 때 매우 유용한 기능입니다.

column -x fillcols.txt

플래그를 사용하지 않고 column 명령을 실행하면 동작은 -x 플래그를 전달하는 것과 동일합니다.

열 크기 찾기

은 환경 변수 ($COLUMNS)를 사용하여 터미널의 크기를 확인하고 크기에 따라 echo 명령을 사용하면 테이블 크기가 터미널에 표시됩니다. .

echo $COLUMNS

아래 이미지를 살펴보세요. 처음에는 $COLUMNS 크기가 60으로 설정되도록 터미널 크기를 조정하고 열 명령을 실행했습니다. 다시 $COLUMNS 크기가 114로 설정되도록 터미널 크기를 조정하고 열 명령을 다시 실행했습니다. 터미널 크기를 조정할 때 열이 테이블을 인쇄하는 방식의 차이를 확인할 수 있습니다.

column -t -s ":" /etc/passwd | head 5

이것이 바로 이 기사입니다. 피드백이 있으면 댓글 섹션에 알려주시기 바랍니다.