使用 bash 脚本读取和分析文本文件
reading and analyzing a text file with bash script
我想读取一个日志文件,并想提取紧跟在关键字“salary”之后的 5-6 位数字。然后想分析工资是不是在2000以上,如果有超过2000的就是跨国公司了,不然就不知道了。写完薪水后,线大部分结束但有时会有一个电子邮件选项。
我的脚本目前看起来像这样。
salary=$(grep -o 'salary [1-9][0-9]\+$' tso.txt | grep -o '[0-9]\+')
echo $salary
if [ $salary > 2000 ]; then echo "it is mnc....."; else ":it is unknown....."; fi
由于您似乎使用的是 GNU grep
,您可以直接使用 grep -oP 'salary *0*\K[1-9][0-9]*'
获取薪水值,然后可以使用 if [ $salary -gt 0 ]
查看薪水。
参见online demo:
#!/bin/bash
tso='salary 23000'
salary=$(grep -oP 'salary *0*\K[1-9][0-9]*' <<< "$tso")
echo $salary # => 23000
if [ $salary -gt 0 ]; then
echo "it is mnc.....";
else
echo "it is unknown.....";
fi
# => it is mnc.....
这可以通过简单的 awk
完成,如下所示:
awk '
{
for (i=2; i<=NF; ++i)
if ($(i-1) == "salary" && $i+0 > 2000) {
mnc = 1
exit
}
}
END {
print (mnc ? "it is mnc....." : "it is unknown.....")
}' file
我想读取一个日志文件,并想提取紧跟在关键字“salary”之后的 5-6 位数字。然后想分析工资是不是在2000以上,如果有超过2000的就是跨国公司了,不然就不知道了。写完薪水后,线大部分结束但有时会有一个电子邮件选项。
我的脚本目前看起来像这样。
salary=$(grep -o 'salary [1-9][0-9]\+$' tso.txt | grep -o '[0-9]\+')
echo $salary
if [ $salary > 2000 ]; then echo "it is mnc....."; else ":it is unknown....."; fi
由于您似乎使用的是 GNU grep
,您可以直接使用 grep -oP 'salary *0*\K[1-9][0-9]*'
获取薪水值,然后可以使用 if [ $salary -gt 0 ]
查看薪水。
参见online demo:
#!/bin/bash
tso='salary 23000'
salary=$(grep -oP 'salary *0*\K[1-9][0-9]*' <<< "$tso")
echo $salary # => 23000
if [ $salary -gt 0 ]; then
echo "it is mnc.....";
else
echo "it is unknown.....";
fi
# => it is mnc.....
这可以通过简单的 awk
完成,如下所示:
awk '
{
for (i=2; i<=NF; ++i)
if ($(i-1) == "salary" && $i+0 > 2000) {
mnc = 1
exit
}
}
END {
print (mnc ? "it is mnc....." : "it is unknown.....")
}' file