5000보다 큰 숫자가 포함된 텍스트 파일의 모든 줄을 복사합니다.

5000보다 큰 숫자가 포함된 텍스트 파일의 모든 줄을 복사합니다.

안녕하세요. 비슷한 문제에 대해 많은 해결책을 시도했지만 그 중 어느 것도 나에게 효과가 없는 것 같습니다. 각 줄의 문자열 " length_ " 뒤에 정의되지 않은 길이가 있는 텍스트 파일이 있습니다. 숫자가 5000 이상인 행을 모두 선택하려면 어떻게 해야 합니까? 이것은 지금까지 시도한 코드 중 가장 깔끔한 시도이지만 여전히 빈 파일만 생성합니다(file1에 확실히 5000보다 큰 숫자가 포함된 행이 포함되어 있음에도 불구하고).

grep --regexp="length_\"[5-9][0-9]\{3,\}\"" file1.txt > file2.txt

입력 텍스트 파일의 샘플 정보:
/file/path/xx00:>TEXT_1_length_81903_cov_10.5145_
/file/path/xx01:>TEXT_2_length_348971_cov_13.6753_
/file/path/xx02:>TEXT_3_length_4989_cov_11.9516_
/file/path/xx03:>TEXT _4 _length_29811_cov_13. 7948장
/파일/경로/xx03:>TEXT_5_length_2567_cov_13.7948_

필요한 샘플 정보를 텍스트 파일로 출력합니다.
/file/path/xx00:>TEXT_1_length_81903_cov_10.5145_
/file/path/xx01:>TEXT_2_length_348971_cov_13.6753_
/file/path/xx03:>NODE_4_length_29811_cov_13.7948_

답변1

다음은 awk를 사용하여 파일에서 문자열 "length_" 뒤에 5000 이하의 숫자가 포함된 행을 인쇄하는 한 가지 방법입니다.

awk '{sub("length_", "", $0); if ($0 <= 5000) { print "length_"$0 } }' input

단지 awk"length_" 문자열을 제거하고 줄의 나머지 부분을 5000과 비교하라고 지시합니다. 5000보다 작거나 같으면 줄의 나머지 부분과 함께 "length_"를 인쇄합니다. 귀하의 Q 제목 줄 (당시)은 "5000보다 큼"이라고 말했으므로 이것이 실제 원하는 경우 awk에서 비교를 변경하십시오.

awk '{sub("length_", "", $0); if ($0 > 5000) { print "length_"$0 } }' input

반면실제파일 형식인 경우 awk 명령은 크게 단순화될 수 있습니다.

awk -F_ '$4 > 5000' input

또는

awk -F_ '$4 <= 5000' input

awk에게 밑줄을 기준으로 필드를 분할한 다음 네 번째 필드를 5000과 비교하도록 지시합니다. 비교가 true이면 (기본적으로) 인쇄됩니다.

답변2

grep -E '_length_([5-9][0-9]{3}|[0-9]{5,})_' file1.txt > file2.txt

출력 라인에는 다음이 포함됩니다.

  • _length_다음은 다음과 같습니다.
    • 5-그리고 9또 다른 3자리 숫자(5000-9999)또는
    • 5자리 이상(10000+)
  • ._

관련 정보