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

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

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

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

を使用すると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

関連情報