我试图提取"最后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个文件,我将在循环中运行它。 那么,你能告诉我哪一个最有效率,是时候吗?
答案 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