
다음과 같은 줄이 많이 포함된 파일이 있습니다.
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 -E
GNU 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와도 호환되어야 합니다.