[英]shell script : how to avoid null character when i read values from a file
我在一个文件中有很多值,并且一行中我得到一个空值。 空值是该文件中的最后一个值。 我想避免使用空值,并从文件中获取最后一个整数值。 任何人都可以用正则表达式来帮助我。 我可以在这里发布我尝试过的内容。
value=`cat $working_tmp_dir/numbers.txt|tail -3| head -1|cut -f2 -d'='|cut -b 1-8`
当我尝试以上时,我没有得到最后一个整数值..它给了我null。
文件中的样本值是:
date=11052015
date=11062015
date=11092015
date=11122015
date=11192015
date=12172015
date=20160202
date="null value coming here"
数字之间的空格只是格式问题。 请帮我。
您可以使用awk
解析文件,以获取与模式匹配的最后一行。
根据示例输出更新,如果该行以date=
开头,则可以这样做
value=$(awk '/date=[0-9]/{a=$0}END{print a}' $working_tmp_dir/numbers.txt | grep -oP "\d+")
这将查找以数字开头的行并将其设置为变量a
并且每次匹配都会执行此操作,因此最后一次匹配将是设置为变量的最终值。
您也可以这样做:
value=$(tail -n2 $working_tmp_dir/numbers.txt | grep -m1 -oP "(?<=date=)\d+$")
因此,基于样本输入,这会将变量value
设置为20160202
。
这个awk
命令应该可以工作:
awk -F= '$2+0 == $2{n=$2} END{print n}' file
20160202
$2+0 == $2
仅在$2
代表数字时才为真。
下列原因是否足够?
egrep '^[0-9]+$' your_file | tail -1
您只需使用grep过滤仅带有整数的行,然后选择带有tail的最后一行。
感谢所有评论。.我尝试了你们发布的所有内容,并且自己做了一些更改,并从你们那里学到了很多东西..非常感谢。 最后我尝试了这个,我得到了解决方案
value=`grep -Po "=\d+" $working_tmp_dir/numbers.txt |tail -1| sed 's/=//'`
这对我来说是完美的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.