簡體   English   中英

Shell腳本逐行讀取文件並找到大於1000的值並打印

[英]Shell script to read file line by line and find value greater than 1000 and print

我有一個包含如下數據的文件:

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

    29 DEADLETTER
   123 SU
  1234 SR
  100089 SM
  1278969 DR

從該文件中,我想讀取每一行並找到大於1000的值,如果大於1000則執行1組命令,如果小於1000則執行另一組命令。

可能嗎?

讓我分享一種執行此操作的方法(我相信有人可以分享更好的方法)。您需要刪除/跳過文件的第一行才能完成此工作。

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

我會這樣使用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的數字,我的答案也不會處理-但如果要使其處理$1<=1000則可以使用$1<=1000 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的值並根據該字段是小於還是大於1000來執行不同的echo

與上述相同,第一個字段恰好為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM