从一行“grep”最后24个字符的前12个

时间:2013-08-02 18:33:07

标签: shell sed awk grep

我试图提取"最后24个字符中的前12个字符"从一条线,即, 换行:

species,subl,cmp=    1    4    1    s1,torque= 0.41207E-09-0.45586E-13

我需要提取" 0.41207E-0"。 (我没有写过代码,所以不要诅咒我的格式。)

我设法通过以下方式做到了这一点:

  var_s=`grep "species,subl,cmp=    $3    $4    $5" $tfile |sed -n '$s/.*\(........................\)$/\1/p'|sed -n '$s/\(............\).*$/\1/p'`

但是,有没有更可读的方法来做这个,而不是计算点?

修改 感谢你们俩; 所以,我有sed,awk grep和bash。 对于100个文件,我将在循环中运行它。 那么,你能告诉我哪一个最有效率,是时候吗?

4 个答案:

答案 0 :(得分:7)

GNU sed 的一种方式(不计点数)

$ sed -r 's/.*(.{11}).{12}/\1/' file
0.41207E-09

GNU grep类似:

$ grep -Po '.{11}(?=.{12}$)' file
0.41207E-09

也许python解决方案也可能有所帮助:

python -c 'import sys;print "\n".join([a[-24:-13] for a in sys.stdin])' < file
0.41207E-09

我不确定您的示例数据和问题是否匹配,因此只需更改{n}量词中的值即可。

答案 1 :(得分:4)

最简单的是使用纯粹的bash:

echo "${str:(-24):12}"

或者awk也可以这样做:

awk '{print substr($0, length($0)-23, 12)}' <<< $str

输出:

0.41207E-09

编辑:在文件中使用bash解决方案:

while read l; do echo "${l:(-24):12}"; done < file

答案 2 :(得分:2)

另一个,效率较低但具有让您发现新工具的优势

`echo "$str" | rev | cut -b 1-24 | rev | cut -b 1-12

答案 3 :(得分:0)

您可以使用awk从一行中获取最后24个字符的前12个字符:

awk '{substr($0,(length($0)-23))};{print substr($0,(length($0)-10))}' myfile.txt