Linux 여러 열 정렬 및 잘라내기

Linux 여러 열 정렬 및 잘라내기

"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

관련 정보