在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但不起作用。
如果你能帮帮我,我会很感激的。
发布于 2016-05-04 17:16:09
另外一个带有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逐个读取每一行。
Regex代表正则表达式。在awk中,它们包含在/中:例如:/4 CA 1/
/4 CA 1/ && /11 O 0 0 0/是一个表达式:当正在读取的行同时匹配第一个regex and (&&)和第二个regex时,这是正确的。在这种情况下,只有字符串;请参阅Open规范问题6中的 9. Regular Expressions。
发布于 2016-05-04 17:23:50
您可能不需要使用grep,因为您可以使用这个awk一行实现所需的输出:
awk '/4 CA 1/ && /11 O 0 0 0/{printf "252\t%s\n",$0}' CVOLOPTs*SYMREMO.out >> data.dat我在252之后放置了一个选项卡,它可能会更改为一个或多个空白空间
https://stackoverflow.com/questions/37034025
复制相似问题