指定された文字列の前にゼロ以外の値を持つファイルの行番号を抽出します。

指定された文字列の前にゼロ以外の値を持つファイルの行番号を抽出します。

次のデータを含むファイルがあります。

1. verification: 10 passed 0 failed
2. verification: 10 passed 0 failed
3. verification: 10 passed 1 failed
4. verification: 10 passed 3 failed
5. verification: 10 passed 0 failed

3番と4番の行番号を知りたいです。

答え1

ファイルが呼び出されると仮定するin.txtと: -

awk '$5>0 {print $0; }' in.txt

あなたに与えるでしょう:-

3. verification: 10 passed 1 failed
4. verification: 10 passed 3 failed

行番号(1-5)がファイルの一部であるとします。そうでない場合は、$5に変更してください$4

行番号がファイルの一部であり、ドットなしで行番号のみを印刷したい場合: -

awk '$5>0 {sub(/\./,"",$1); print $1 }' in.txt

これは作る:-

3
4

答え2

Pass 以下をGNU grep使用できますlookbehind

$ grep -P '(?<!0) failed' file 
3. verification: 10 passed 1 failed
4. verification: 10 passed 3 failed

またはより短いバージョンawk

$ awk '$5 > 0' file

答え3

実際の数字を印刷するのではなく、行の最初の数字をその点まで印刷することに注意してください。

そしてsed:

 cat inputfile.txt | sed  '/ 0 failed$/d ; s/\..*//'

そしてgrep と sed:

 cat inputfile.txt | grep -v ' 0 failed$' | sed 's/\..*//'

出力:

3
4

関連情報