我有一个包含以下数据的文件:
SYSTEM: Running, Fri Jan 6 00:00:01 GMT 2017
29 DEADLETTER
123 SU
1234 SR
100089 SM
1278969 DR
从这个文件中,我想读取每一行并找到大于1000的值,如果大于1000则执行1组命令,如果小于1000则执行另一组命令。
有可能吗?
答案 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个单独的字段f1
和f2
。然后我检查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