열을 개별적으로 정렬하고 텍스트 파일에서 고유하게 정렬합니다.

열을 개별적으로 정렬하고 텍스트 파일에서 고유하게 정렬합니다.

다음과 같은 파일이 있습니다.

D F T E
A R T E
K A O E
E T P J

각 열을 정렬하고 다음과 같이 각 열을 개별적으로 설정하고 싶습니다.

A A O E
D F P J
E R T
K T

sort나 uniq를 사용하여 이 작업을 수행하는 방법을 아는 사람이 있는지 궁금합니다.

답변1

다음과 같이 시도해 볼 수 있습니다.

paste -d'\t' <(cut -f 1 -d' ' file | sort -u) <(cut -f 2 -d' ' file | sort -u) <(cut -f 3 -d' ' file | sort -u) <(cut -f 4 -d' ' file | sort -u) >output

출력을 더 잘 보이게 하기 위해 tab구분 기호 로 사용하겠습니다 .paste

답변2

(좋아요답변 붙여넣기/잘라내기@taliezin. 이는 많은 열에 대한 보다 일반적인 솔루션입니다. 데이터를 열당 하나의 파일로 분할하고, 파일을 정렬하고, 다시 파일로 병합합니다. 예를 들어, 열 2가 열 3보다 짧은 경우 고정 너비 열이 1자라고 가정합니다. 이 데모에는 data0초기 파일이 있습니다.

for i in {1..4}
do  awk -v i=$i '{ch = substr($0,i*2-1,1);if(ch!=" ")print ch}' </tmp/data0 |
    sort -u >/tmp/data$i
done
awk -v rows=$(wc -l </tmp/data0) '
BEGIN{
    for(i=1;i<=4;i++)
       file[i] = "/tmp/data" i
    while(rows-->0){
        for(i=1;i<=4;i++){
             d = ""
             getline d <file[i]
             printf("%1s ",d)
        }
        printf "\n"
    }
}' </dev/null

관련 정보