ファイル内の特定の数値範囲が見つかった回数を見つける

ファイル内の特定の数値範囲が見つかった回数を見つける

,(カンマ)で区切られた数字のファイルがあります。また、間に一連の数字が含まれています。たとえば、次の300-400テキストファイルがあります。testme.txt

200,300,234,340-350,400,360,333-339
409-420
4444-31231231
348

番号が存在するかどうかを知りたいです348。 348は2か所に表示されます:

  • 340-350
  • 最後の行に。

それを見つける方法? sed、awkで試しましたが、regex数値範囲をキャプチャするためのスクリプトを作成することはできません。見つけるための別の方法がありますか?

更新:無差別代入ソリューションが1つ見つかり、範囲でのみ機能します。

count=0;
num1=348;
for i in `sed 's/\([0-9]\+\-[0-9]\+\)/:&:/g' testme.txt  | 
    awk -F: '{ for(i=1; i<=NF; i++) if($i ~/[0-9]+-[0-9]+/){print $i} }'`;      
do 
    lh=`echo $i | awk -F\- '{print $1}'`; 
    rh=`echo $i | awk -F\- '{print $2}'`;  
    if [ $lh -le $num1 -a $rh -ge $num1 ]; 
    then  
        count=`expr $count + 1`; 
    fi; 
done
echo $count;

ベストアンサー1

,または、\nレコード区切り文字と-フィールド区切り文字として扱うGNU awkソリューションです。フィールド数に基づいて同一性検査または範囲検査を適用する

awk -v num=348 -v RS=',|\n' -F'-' 'NF == 2 && $1 <= num && $2 >= num{c++};
           NF == 1 && $0 == num{c++};
           END{print c+0}' file
2

おすすめ記事