Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2863

[Bash]ファイルのパターンマッチしない行をカウントする

$
0
0

ファイルのパターンマッチしない行をカウントするサンプルコード(覚え書き)。
具体的には、各行の特定の箇所の出力が正しいか調べます。

環境

  • 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件です

うまくいきました!

参考


Viewing all articles
Browse latest Browse all 2863

Trending Articles