특정 열에 특정 값이 있는 행을 수집하는 방법은 무엇입니까?

특정 열에 특정 값이 있는 행을 수집하는 방법은 무엇입니까?

다음과 같은 파일이 있습니다

  200.000    1.353    0.086
  200.250    1.417    0.000
  200.500    1.359    0.091
  200.750    1.423    0.000
  201.000    1.365    0.093
  201.250    1.427    0.000
  201.500    1.373    0.093
  201.750    1.432    0.000
  202.000    1.383    0.091
  202.250    1.435    0.000
  202.500    1.392    0.087
  202.750    1.436    0.000
  203.000    1.402    0.081
  203.250    1.437    0.001
  203.500    1.412    0.073
  204.000    1.423    0.065
  204.500    1.432    0.055
  205.000    1.441    0.045  

첫 번째 열에 소수점 .000과 .500이 있는 행만 grep하여 출력이 다음과 같도록 하고 싶습니다.

  200.000    1.353    0.086
  200.500    1.359    0.091
  201.000    1.365    0.093
  201.500    1.373    0.093
  202.000    1.383    0.091
  202.500    1.392    0.087
  203.000    1.402    0.081
  203.500    1.412    0.073
  204.000    1.423    0.065
  204.500    1.432    0.055
  205.000    1.441    0.045  

답변1

grep을 사용하지 않습니다. 사용 awk.

"your data" | awk '$1 ~ /\.[05]00/'

답변2

awk '$1 ~ /\.[50]00/ { print $0 }' myFile.txt

첫 번째 열은 점 $1과 일치하며 /\.500|\.000/정규식 문자가 아닌 리터럴 점으로 이스케이프되어 ~부분적으로 일치하고 전체 줄을 인쇄합니다.$0

답변3

나는하고 싶다grep첫 번째 열에 소수점 .000 및 .500이 있는 행만

나의 첫 생각

grep '^ *[0-9][0-9][0-9]\.[50]00' filename

WSL을 사용한 빠른 테스트

$ head testdata
              200.000    1.353    0.086
              200.250    1.417    0.000
              200.500    1.359    0.091
              200.750    1.423    0.000
              201.000    1.365    0.093
              201.250    1.427    0.000
              201.500    1.373    0.093
              201.750    1.432    0.000
              202.000    1.383    0.091
              202.250    1.435    0.000
$ grep '^ *[0-9][0-9][0-9]\.[50]00' testdata
              200.000    1.353    0.086
              200.500    1.359    0.091
              201.000    1.365    0.093
              201.500    1.373    0.093
              202.000    1.383    0.091
              202.500    1.392    0.087
              203.000    1.402    0.081
              203.500    1.412    0.073
              204.000    1.423    0.065
              204.500    1.432    0.055
              205.000    1.441    0.045

이것을 더 간결하게 표현하는 방법이 있습니다.

$ grep -E '^ *[0-9]{3}\.[50]00' testdata
              200.000    1.353    0.086
              200.500    1.359    0.091
              201.000    1.365    0.093
              201.500    1.373    0.093
              202.000    1.383    0.091
              202.500    1.392    0.087
              203.000    1.402    0.081
              203.500    1.412    0.073
              204.000    1.423    0.065
              204.500    1.432    0.055
              205.000    1.441    0.045

첫 번째 열에 3자리 정수 부분이 아닌 경우

grep -E '^ *[0-9]+\.[05]00' testdata

[:digit:]어떤 상황에서는 대신에 를 사용해야 할 수도 있습니다 [0-9].

등등.

man grep당신의 친구입니다.

답변4

 grep -e '2[^ ]*.000' -e '2[^ ]*.500' file.txt

관련 정보