[英]bash : check if sum of specific words smaller than given number
我有 300 個由以下格式組成的文件:
0 0 261157 0 13267 0 314 0 274738 736485 999.999756
1 0 261155 0 13269 0 314 0 274738 736625 1000.147705
2 0 261162 0 13264 0 312 0 274738 736703 1000.104370
3 0 261156 0 13265 0 312 0 274733 736838 1000.113708
4 0 261166 0 13261 0 311 0 274738 736918 999.999756
5 0 261173 0 13258 0 311 0 274742 737054 1000.001892
6 0 261153 0 13284 0 311 0 274748 737137 1000.204529
7 0 261152 0 13280 0 312 0 274744 736800 1000.188110
8 0 261154 0 13277 0 311 0 274742 737081 1000.107178
9 0 261150 0 13278 0 310 0 274738 737309 1000.189392
10 2348 260942 0 13271 0 310 2348 274523 737683 1001.341980
11 2342 260915 0 13264 0 310 2342 274489 737720 1000.341797
12 2340 260900 0 13272 0 310 2340 274482 738490 1000.266357
13 2339 260885 0 13284 0 309 2339 274478 738363 1000.312317
這是我的文件部分的示例。 行數可以從 1000 到 50000 不等,具體取決於文件。
現在,我需要檢查最后一行的第二列和倒數第二列。 如果這些數字的總和小於 10,這意味着我的數據有問題。
我知道如何通過“tail”打印出最后一行,但我從未嘗試過提取數字,將它們相加並與數字進行比較以查看它是更小還是更大。
謝謝。
使用tail
提取最后一行並將其提供給awk
:
$ tail -n 1 file | awk '$2 + $(NF-1) < 10 {print "Wrong"}'
如果您的文件有很多行,它會更快。
awk 'END{x=($2+$(NF-1));if(x<10) print "Wrong";else print "correct"}' test
correct
使用的樣本數據:
cat test
0 0 261157 0 13267 0 314 0 274738 736485 999.999756
1 0 261155 0 13269 0 314 0 274738 736625 1000.147705
2 0 261162 0 13264 0 312 0 274738 736703 1000.104370
3 0 261156 0 13265 0 312 0 274733 736838 1000.113708
4 0 261166 0 13261 0 311 0 274738 736918 999.999756
5 0 261173 0 13258 0 311 0 274742 737054 1000.001892
6 0 261153 0 13284 0 311 0 274748 737137 1000.204529
7 0 261152 0 13280 0 312 0 274744 736800 1000.188110
8 0 261154 0 13277 0 311 0 274742 737081 1000.107178
9 0 261150 0 13278 0 310 0 274738 737309 1000.189392
10 2348 260942 0 13271 0 310 2348 274523 737683 1001.341980
11 2342 260915 0 13264 0 310 2342 274489 737720 1000.341797
12 2340 260900 0 13272 0 310 2340 274482 738490 1000.266357
13 2339 260885 0 13284 0 309 2339 274478 738363 1000.312317
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.