[英]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個單獨的字段f1
和f2
。 然后,我檢查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.