주어진 열에 주어진 값이 있는 파일에서 행을 선택하는 우아한 방법입니까?

주어진 열에 주어진 값이 있는 파일에서 행을 선택하는 우아한 방법입니까?

다음과 같은 줄이 많이 포함된 파일이 있습니다.

0       file:/home/knappen/somefilename.txt  7       0.2838356973995272      19      0.21823286052009455     18      0.10121158392434988     15      0.07816193853427897     11
  0.07284278959810875     6       0.056885342789598115    8       0.03738179669030733     22      0.032062647754137114    23      0.01610520094562648     12      0.01610520094562648     16      0.010786052009456266    0       0.010786052009456266    13      0.009013002364066195    5       0.009013002364066195    10      0.007239952718676124    9       0.007239952718676124    14      0.005466903073286052    4       0.005466903073286052    21      0.003693853427895981    20      0.003693853427895981    17      0.003693853427895981    3       0.003693853427895981    2       0.003693853427895981    1
   0.003693853427895981

세 번째 열의 항목이 주어진 숫자와 같은 모든 행을 선택하고 싶습니다.

저는 이 목적을 위한 패턴이나 이 효과를 갖는 작은 Python 또는 Perl 스크립트를 작성하는 방법을 알고 있지만 grep -EGNU coreutils를 사용하는 우아한 솔루션이 있는지 궁금합니다.

추신: 이 질문에서 좋은 제안이 포함된 답변을 찾았습니다.열 값을 기준으로 CSV 파일에서 행 선택, 그러나 이러한 도구는 GNU coreutils의 범위를 벗어납니다. 거기에 나온 답변은 제게 도움이 될 만큼 충분했습니다. 하지만 쉘 유틸리티의 강력한 기능에 대해 더 알아보기 위해 어쨌든 이 질문을 드리고 있습니다.

답변1

Awk매우 강력한 텍스트 서식 지정/조작 및 패턴 일치 도구입니다. 기본값은 단일 공백인 사용자 정의 구분 기호를 사용하여 파일의 각 줄을 구분합니다. 분할 후 행 의 마지막 열 번호가 있는 $1,$2..$N위치 에서 개별 필드에 액세스할 수 있습니다 .N

따라서 귀하의 요구 사항에 따라 세 번째 열을 필요한 값과 일치시키십시오.

awk '$3 == "string"' file 

예를 들어 파일이 구분 기호가 다른 CSV인 경우 ,다음과 같이 정의하면 됩니다.

awk -v FS="," '$3 == "string"' file

이는 GNU에만 국한되지 않으며 awk해당 변형은 *nix 시스템에서 작동하고 POSIX와도 호환되어야 합니다.

관련 정보