awk는 여러 텍스트 파일에서 특정 숫자 범위와 일치하는 행을 추출합니다.

awk는 여러 텍스트 파일에서 특정 숫자 범위와 일치하는 행을 추출합니다.

예를 들어 탭으로 구분된 텍스트 파일에는 다음 두 개의 열이 있습니다.

blah    ABC_DE_23154_e53G_12
blah    DEF_GH_23165_f35H_36
blah    CED_BF_56412_c56T_21

다음 awk 스크립트를 사용하여 두 번째 밑줄 뒤의 특정 범위(23153에서 23167 사이)에 속하는 두 번째 열의 세 번째 숫자와 일치하는 행을 추출합니다(이것은 작동하지 않습니다).

awk -F "_" '$2>23153 && $2<23167' *.txt >> output.txt

"output.txt" 파일 내의 출력은 다음과 같아야 합니다.

blah    ABC_DE_23154_e53G_12
blah    DEF_GH_23165_f35H_36

각 파일에 약 8000줄의 데이터가 포함된 약 600개의 텍스트 파일이 있습니다.

고마워요, Plasma33

답변1

$2첫 번째 문제는 awk 스크립트에 있다고 생각합니다. with $2는 두 번째 열(DE, GH, BF,...)이고 비교하는 숫자가 있는 세 번째 열이 아니기 때문입니다.

그러면 조건이 있어야 하고, 조건이 충족되면 무엇을 하고 싶은지 정해야 합니다.

awk -F'_' '($3>23153 && $3<23167){print}' *.txt >> output.txt

에는 조건이 있고 ()에는 동작이 있습니다 {}.

편집하다:

주석에서 상기시켰듯이 {print}작업이 기본값이므로 awk 스크립트를 더욱 단순화할 수 있습니다.

awk -F'_' '($3>23153 && $3<23167)' *.txt >> output.txt

답변2

파이썬을 사용해 보세요

k=open('filename','r')
for i in k:
    k=i.strip().split('_')[2]
    if int(k) > 23153<23167:
        print i.strip()

산출

blah    ABC_DE_23154_e53G_12
blah    DEF_GH_23165_f35H_36
blah    CED_BF_56412_c56T_21

관련 정보