사이의 값을 찾는 Grep/Awk

사이의 값을 찾는 Grep/Awk

그래서 다음과 같은 줄이 포함된 텍스트 파일이 있습니다.

http://sg.ovies.m/.ss/ (Status: 200) [Size: 128]
http://sg.mo.v/.dev/ (Status: 200) [Size: 12328]
http://som.b/.hal/ (Status: 200) [Size: 1238]
http://m.cb/.ho/ (Status: 200) [Size: 0]
http://sm.jo/.hK/ (Status: 200) [Size: 0]`

Size가 1에서 100 사이인 행만 grep하고 싶습니다.

따라서 출력은 다음과 같습니다.

http://sg.ovies.m/.ss/ (Status: 200) [Size: 128]
http://sg.mo.v/.dev/ (Status: 200) [Size: 12328]
http://som.b/.hal/ (Status: 200) [Size: 1238]

grep이나 awk를 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

Awk를 사용하면 다음과 같은 작업이 쉬워집니다.

awk '{size=$5; sub(/]/, "", size); size=size+0; if (size <= 100 && size >= 1) {print $0 } }' file_to_read.txt

다음을 좀 더 친근하게 작성해 보세요.

awk '{
    # create a new variable "size".
    # items are separated by spaces, we need the 5th item
    size=$5;

    # remove the trailing "]"
    sub(/]/, "",  size);

    # make sure size is an int
    size=size+0;

    # Choose rows with seize between 1 and 100
    if (size <= 100 && size >= 1) {
        # print the whole line
        print
    }

    }'  file_to_read.txt

답변2

:문자가 입력의 3개 위치에만 나타나는 것을 고려하면 이를 필드 구분 기호로 사용한 다음 비교를 위해 하위 문자열로 숫자를 추출할 수 있습니다(선행 공백을 고려).

awk -F':' '{size=substr( $NF,2,length($NF)-2 ); if((size>=1)&&(size<=100)) print }' input.txt

"크기: 1에서 100 사이"를 요청했습니다. 그러나 예제 출력에는 "크기가 1보다 큽니다"라고 표시됩니다. 그렇다면 if 문을 다음과 같이 단순화할 수 있습니다.if(size > 1) print

답변3

다음 패턴을 사용하면 됩니다.

grep -E 'Size: (?:100|[1-9]|[0-9]{2})]' test

나는 grep에게 확장 정규식 구문( )을 사용 하고 0에서 99 사이의 값을 -E일치시키도록 지시했습니다 .100Size:

관련 정보