bash:检查特定单词的总和是否小于给定的数字

时间:2016-09-12 07:37:38

标签: bash shell

我有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,这意味着我的数据有问题。

我知道如何用“尾巴”打印最后一行,但我从未试图提取数字,将它们相加并与数字进行比较,以确定它是否更小或更大。

感谢。

2 个答案:

答案 0 :(得分:1)

使用tail提取最后一行并将其提供给awk

$ tail -n 1 file | awk '$2 + $(NF-1) < 10 {print "Wrong"}'

如果您的文件有很多行,速度会更快。

答案 1 :(得分:0)

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