다음과 같은 파일이 있습니다.
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