"info"라는 이름의 다음 파일이 있습니다.
White:73:Mars:1543:Manuel
Green:17:Jupiter:1968:Sebastian
Blue:24:Venus:1970:Anna
Red:35:Neptune:1122:Javier
Yellow:135:Earth:1234:Raymond
식물과 이름(정렬)이 있는 열만 사용 cut
하고 표시 해야 합니다 . sort
이는 내가 다음과 함께 있어야 함을 의미합니다.
Earth:Anna
Jupiter:Javier
Mars:Manuel
Neptune:Raymond
Venus:Sebastian
사용해 보았
cut -d: -f3,5 info | sort -t: -k1,1 -k2,2
으나 첫 번째 열만 정렬되고 두 번째 열은 정렬되지 않았습니다.
나도 그것을 시도했지만
cut -d: -f3,5 info | sort -t: -k1,1 -k2,2 | sort -t: -k2,2
두 번째 열만 정렬했습니다.
모든 도움에 감사드립니다.
답변1
열을 개별적으로 정렬합니다.
paste -d: <(cut -d: -f3 info | sort) <(cut -d: -f5 info | sort)
Earth:Anna
Jupiter:Javier
Mars:Manuel
Neptune:Raymond
Venus:Sebastian
답변2
결과는 별도로 정렬된 두 개의 데이터 열로 구성되므로 sort
각각 별도의 데이터 세트가 있는 두 번의 호출이 필요합니다.
이것네자부드카의 답변프로세스 대체를 이해하는 셸에서 이를 수행하는 방법을 보여줍니다.
paste -d : \
<( cut -d : -f 3 info | sort ) \
<( cut -d : -f 5 info | sort ) \
>outfile
위의 내용은 출력을 outfile
.
프로세스 대체를 이해하지 못하는 셸(질문에 특정 셸을 언급하지 않은 경우)에서는 중간 파일을 사용하여 두 단계로 이 작업을 수행할 수 있습니다.
cut -d : -f 3 info | sort > outfile.tmp
cut -d : -f 5 info | sort | paste -d : outfile.tmp - >outfile
rm outfile.tmp
첫 번째 파이프라인은 행성 정렬 이름의 초기 열을 생성합니다. 정렬된 데이터를 파일로 리디렉션합니다 outfile.tmp
. 두 번째 파이프라인은 첫 번째 열과 비슷한 방식으로 두 번째 열을 생성하고 다음을 paste
사용하여 첫 번째 열에 추가합니다. 그런 다음 중간 파일을 삭제합니다.
답변3
사용멍하니그리고 내장된 배열 정렬 기능이므로 파일 전체를 한 번만 반복하면 됩니다.
gawk '
BEGIN { FS = OFS = ":" }
{
planet[NR] = $3
name[NR] = $5
}
END {
asort(planet)
asort(name)
for (i=1; i <= NR; i++) print planet[i], name[i]
}
' info
답변4
step1: awk -F ":" '{print $3}' inpfile | sort -k1.1 >out.txt; awk -F ":" '{print $5}' inpfile |sort -k1.1 >out_1.txt
step2: paste -d ":" out.txt out_1.txt
산출
Earth:Anna
Jupiter:Javier
Mars:Manuel
Neptune:Raymond
Venus:Sebastian