ファイルのパターンマッチしない行をカウントするサンプルコード(覚え書き)。
具体的には、各行の特定の箇所の出力が正しいか調べます。
環境
- OS: Amazon Linux2
概要
ファイルの各行先頭から、7文字がIDで、そのパターンが以下の通りであることを調べます。
パターン:ID + 数字5文字
[例]ID12345
該当しない場合は、対象の行数とその内容を出力し、最後にパターンマッチしなかった件数合計を出力します。
コード
count_unmatch_line.sh
#!/bin/bash## マッチしない行をカウント## $1 検査したいファイル名## マッチしない行数合計countNum=0
# 行番号countLine=0
echo"マッチしない行をカウントします"echo"------------------------------"while read line
do
countLine=$((countLine+1))if[[!${line:0:7}=~ ^ID[0-9]{5}$ ]];then
echo"$countLine行目:${line:0:7}"countNum=$((countNum+1))fi
done< $1echo"------------------------------"echo"マッチしない行は合計$countNum件です"
実行してみる
以下のファイルで、先頭7文字が、ID + 数字5文字になっていない行と内容を表示、カウントします。
hoge.tsv
ID12341 000000 00000 123 000001
ID12342 000000 00000 125 000001
ID12343 000000 00000 124 000001
ID12344 000000 00000 123 000002
ID1?345 000000 00000 123 000003
ID12346 000000 00000 124 000002
ID12347 000000 00000 123 000004
ID123a8 000000 00000 125 000002
5,8行目に不正な値が含まれています。
※スペースっぽい箇所は、タブです。
実行コマンドと結果
$ bash count_unmatch_line.sh /product/share/eee/hoge.tsv
マッチしない行をカウントします
------------------------------
5行目:ID1?345
8行目:ID123a8
------------------------------
マッチしない行は合計2件です
うまくいきました!