間の値を見つける 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]`

サイズが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:

関連情報