BaR*_*Rud 3 shell awk grep sed
我试图从一行中提取"最后24个字符的前12个",即一行:
species,subl,cmp= 1 4 1 s1,torque= 0.41207E-09-0.45586E-13
Run Code Online (Sandbox Code Playgroud)
我需要提取"0.41207E-0".(我没有编写代码,所以不要诅咒我的格式.)
我设法通过以下方式做到了这一点:
var_s=`grep "species,subl,cmp= $3 $4 $5" $tfile |sed -n '$s/.*\(........................\)$/\1/p'|sed -n '$s/\(............\).*$/\1/p'`
Run Code Online (Sandbox Code Playgroud)
但是,有没有更可读的方式这样做,而不是计数点?
编辑 感谢你们两位; 所以,我有sed,awk grep和bash.对于100的文件,我将在循环中运行它.那么,你能告诉我哪一个最有效率,是时候吗?
一种方式GNU sed (不计点):
$ sed -r 's/.*(.{11}).{12}/\1/' file
0.41207E-09
Run Code Online (Sandbox Code Playgroud)
与GNU grep:相似
$ grep -Po '.{11}(?=.{12}$)' file
0.41207E-09
Run Code Online (Sandbox Code Playgroud)
也许python解决方案也可能有所帮助:
python -c 'import sys;print "\n".join([a[-24:-13] for a in sys.stdin])' < file
0.41207E-09
Run Code Online (Sandbox Code Playgroud)
我不确定您的示例数据和问题是否匹配,因此只需相应地更改{n}量词中的值.