在bash中,我使用grep
命令将结果打印到文件中:
grep "4 CA 1" CVOLOPTs*SYMREMO.out | grep "11 O 0 0 0" >> data.dat
在data.dat
文件中打印以下内容:
4 CA 1 2.3311 4.4052 11 O 0 0 0
我想让data.dat
看起来如下:
252 4 CA 1 2.3311 4.4052 11 O 0 0 0
我尝试过类似的事情:
grep "4 CA 1" CVOLOPTs*SYMREMO.out | grep "11 O 0 0 0" >> echo "252" data.dat
但是不起作用。
如果你能帮助我,我将不胜感激。
答案 0 :(得分:3)
使用awk
的额外管道可以解决这个问题:
grep "4 CA 1" CVOLOPTs*SYMREMO.out | grep "11 O 0 0 0" | awk ´{print "252",$0}´ >> data.dat
整个事情可以通过一个awk
完成:
awk ´/4 CA 1/ && /11 O 0 0 0/ {print "252",$0}' CVOLOPTs*SYMREMO.out >> data.dat
$0
是整个当前行。在这种情况下,由2个正则表达式选择的行。
awk
逐个读取每一行。
正则表达式代表正则表达式。使用awk
时,它们会被/
括起来:例如/4 CA 1/
/4 CA 1/ && /11 O 0 0 0/
是一个表达式:当读取的行与第一个正则表达式and
(&&
)匹配第二个正则表达式时,它是正确的。在这种情况下,只有字符串;请参阅Open Group Base Specifications Issue 6中的
9. Regular Expressions。
答案 1 :(得分:1)
您可能不需要使用grep
,因为您可以获得所需的输出
这个awk
单行:
awk '/4 CA 1/ && /11 O 0 0 0/{printf "252\t%s\n",$0}' CVOLOPTs*SYMREMO.out >> data.dat
我在252之后放了一个标签,可能会改成一个或多个空格