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을 사용하고 있으며 Ubuntu와 CentOS 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에서 동일한 명령을 실행하면 결과가 매우 좋아질 것입니다. 이는 Ubuntu의 column 명령(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
플래그를 사용하면 행을 열로 변환할 수 있습니다. 이 동작은 열 명령의 rhel 및 ubuntu 변형 모두에서 동일합니다. 이는 awk 또는 열 명령을 통해 특정 필드를 가져온 다음 이를 CSV 파일의 헤더로 변환해야 할 때 매우 유용한 기능입니다.
column -x fillcols.txt
플래그를 사용하지 않고 column 명령을 실행하면 동작은 -x
플래그를 전달하는 것과 동일합니다.
열 크기 찾기
열은 환경 변수 ($COLUMNS)
를 사용하여 터미널의 크기를 확인하고 크기에 따라 echo 명령을 사용하면 테이블 크기가 터미널에 표시됩니다. .
echo $COLUMNS
아래 이미지를 살펴보세요. 처음에는 $COLUMNS
크기가 60으로 설정되도록 터미널 크기를 조정하고 열 명령을 실행했습니다. 다시 $COLUMNS
크기가 114로 설정되도록 터미널 크기를 조정하고 열 명령을 다시 실행했습니다. 터미널 크기를 조정할 때 열이 테이블을 인쇄하는 방식의 차이를 확인할 수 있습니다.
column -t -s ":" /etc/passwd | head 5
이것이 바로 이 기사입니다. 피드백이 있으면 댓글 섹션에 알려주시기 바랍니다.