2014-02-19 3 views
0

큰 CSV 파일이 있습니다.이 파일을 column2와 column3으로 정렬하고 column2에서 고유 한 값을 가진 처음 3 줄만 가져옵니다. 그래서 다음과 같이 검색합니다 :CSV 파일에서 uniq 값이있는 첫 번째 3 줄을 추출합니다.

sort -k2,2 -k3,3 -u2,2-3 (-u2,2-3 부분은 실제로 존재하지 않습니다).

독자적으로 프로그램을 작성하지 않고 명령 줄에서 어떻게하는지 생각해보십시오.

+0

_ "독자적으로 프로그램을 작성하지 않으시겠습니까?"_ CLI (bash에 의해 실행 됨) 용 프로그램 작성으로 끝납니다. –

답변

0

보기 흉하지만이 방법이 효과가 있다고 생각합니다.

가정은 :

  1. 파일은 $FILE 지정됩니다.
  2. 파일에는 쉼표로 구분 된 숫자 만 포함됩니다.

코드 :

awk 'BEGIN { FS="," } !/^$/ { print NR,$2,$3 }' < $FILE | 
    sort -nk 2,3 | 
    awk '{ print $1,$2 }' 
    uniq -uf 1 | 
    head -n 3 | 
    while read num ignore; do sed -n "${num}p" < $FILE; done 

라인 단위 설명 :

  1. awk: 인쇄 라인 수와 필드 2와 모든 공백이 아닌 라인 3 파일. 나중에, 우리는 우리가 필드 2, 3
  2. awk: 제거하여 숫자 필드 2, 3
  3. sort: 정렬에 출력을 분류 한 후, $FILE에서 원하는 라인을 추출하는 지표로 줄 번호를 사용합니다 필드 3, 행 번호와 필드 2 만 남김.
  4. uniq: 줄 번호를 무시하고 고유 한 줄만 인쇄하십시오.
  5. head: 첫 번째 3 줄만 인쇄하십시오.
  6. while: 각 줄의 나머지 부분을 무시하고 3 개의 줄 번호를 읽습니다. 원본 파일에서 해당 행을 인쇄하십시오.
관련 문제