次のデータを含むファイルがあります。
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