열 3으로 awk 정렬을 사용하는 방법


90

다음과 같은 파일 (user.csv)이 있습니다.

ip,hostname,user,group,encryption,aduser,adattr

사용자별로 모든 열 정렬을 인쇄하려는 경우

시도했지만 awk -F ":" '{print|"$3 sort -n"}' user.csv작동하지 않습니다.


11
sort -t, -k3 file
Kevin

답변:


174

그냥 sort.

sort -t, -nk3 user.csv

어디

  • -t,-구분 기호를 ,.

  • -n-숫자 정렬을 제공합니다. 시도에 추가 했으므로 추가되었습니다. 사용자 필드가 텍스트 전용 인 경우 필요하지 않습니다.

  • -k3-필드 (키)를 정의합니다. user는 세 번째 필드입니다.


2
정렬 2 열을 어떻게 사용할 수 있습니까? 예를 들어 6 열로 먼저 정렬하고 3 초로 열로 정렬합니다.
user2452340

1
CSV에 쉼표가 포함 된 따옴표로 묶인 문자열이있는 경우에는 작동하지 않습니다 (정렬 기준으로 사용할 열이 쉼표가 포함 된 열보다 이전 인 경우 제외). awk로 먼저 패스해야 할 수도 있습니다 (FPAT = "[^,] * | \"[^ \ "] * \" "및 OFS ="| "또는 sort와 함께 사용할 수있는 다른 구분 기호 사용)
davemyron

1
@ user2452340 다음과 같이 할 수 있습니다 sort -t, -nk3 filename.csv | sort -t, -nk6.-먼저 열 3을 기준으로 정렬 한 다음 열 6을 기준으로 정렬하므로 열 6이 모든 방식으로 올바르게 정렬되고 열 6이 동일한 모든 행에 대해 열 3으로 정렬됩니다. .
Matthew

3
@Matthew sort -t ',' -k3,3n -k6,6n가 더 좋을 것입니다. -k33 열과 나머지 줄을 사용합니다.
Kusalananda 2016

1
2 열 파일을 쉼표로 나누기 위해 -t가 필요했습니다. 감사합니다. jaypal
Ricardo Rivera Nieves

20
  1. awk를 사용하여 사용자 ID를 앞에 넣으십시오.
  2. 종류
  3. 사용자 ID에 공백이 없다고 가정하고 sed를 사용하여 중복 사용자 ID를 제거하십시오.

    awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
    

특히 정렬 필드를 추가하기 위해 열을 구문 분석하거나 결합해야하는 경우에 매우 유용합니다. 그런 다음 원래 줄만 유지합니다. awk / split을 사용하여 정렬을 위해 날짜 및 시간 필드를 구문 분석 / 결합한 다음 제거했습니다.
skytaker

1
sort특정 열을 기준으로 정렬하는 방법을 이미 알고 있지만 Schwartzian 변환 이라고하는이 기술 은 정렬하려는 필드가 잘 정의 된 열이 아닌 경우에 유용합니다.
tripleee

10

구분 기호를 선택할 수 있습니다.이 경우 콜론을 선택하고 알파벳 순서로 정렬하여 열 번호 1을 인쇄했습니다.

awk -F\: '{print $1|"sort -u"}' /etc/passwd

9
awk -F, '{ print $3, $0 }' user.csv | sort -nk2 

역순

awk -F, '{ print $3, $0 }' user.csv | sort -nrk2 

6

이 시도 -

awk '{print $0|"sort -t',' -nk3 "}' user.csv

또는

sort -t',' -nk3 user.csv

2
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','

이것은 작동합니다


0

첫 번째 줄 (헤더)을 정렬에서 제외하기 위해 두 개의 버퍼로 분할했습니다.

df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.