Shell脚本逐行读取文件并查找大于1000的值并打印

时间:2017-01-06 05:02:51

标签: linux shell sh

我有一个包含以下数据的文件:

SYSTEM: Running, Fri Jan  6 00:00:01 GMT 2017

    29 DEADLETTER
   123 SU
  1234 SR
  100089 SM
  1278969 DR

从这个文件中,我想读取每一行并找到大于1000的值,如果大于1000则执行1组命令,如果小于1000则执行另一组命令。

有可能吗?

2 个答案:

答案 0 :(得分:0)

让我分享一种做法(我相信有人可以分享更好的方式) 您需要删除/跳过第一行文件才能使其正常工作。

while read line
do 
    num=`echo $line | cut -d " " -f1`
    if (( $num > 1000)); 
    then 
       "Your if logic"
    else
       "Your else logic"
    fi ; 
done< filename

答案 1 :(得分:0)

我会像这样使用awk

awk 'NR<3{next} $1<1000 {system("echo 1")} $1>1000{system("echo 2")}' file

<强>输出

1
1
2
2
2

那说...... “如果行号小于3,请忘记它并移动到下一行。如果第一个字段小于1000,则运行命令echo 1。如果第一个字段超过1000,运行命令echo 2

请注意,您的问题并不涉及数字正好是1000,所以我的答案也不是 - 但如果您想让它处理1000,您可以使用$1<=1000

如果你真的只想使用bash shell:

#!/bin/bash
{ read header
  read header
  while read f1 f2; do
    [ $f1 -lt 1000 ] && echo 1
    [ $f1 -gt 1000 ] && echo 2
  done } < file

{...}是一个从file读取的复合语句。在那里,我读取并丢弃两个标题行,然后输入一个循环,将后续行读入2个单独的字段f1f2。然后我检查f1的值并执行不同的echo,具体取决于字段是小于还是大于1000。

与上述相同,第一个字段恰好是1000 - 您可以使用-le “小于或等于”-ge “大于或等于“

或者您可以使用sed来删除这两个标题行:

#!/bin/bash
sed '1,2d' file | while read f1 f2; do
    [ $f1 -lt 1000 ] && echo 1
    [ $f1 -gt 1000 ] && echo 2
done