首页 > 解决方案 > 在 Linux 上使用 AWK 编写文件

问题描述

我有一个文件有几行,其中一行是

-xxxxxxxx()xxxxxxxx

我想将此行的内容添加到一个新文件中

我这样做了:

awk ' /^-/ {system("echo" $0 ">" "newline.txt")} '

但这不起作用,它返回一个错误,上面写着:

Unnexpected token '(' 

我相信这是由于 () 存在于该行中。如何克服这个问题?

标签: linuxbashunixawksystem-administration

解决方案


您需要添加适当的空格!

对于您的错误awk ' /^-/ {system("echo" $0 ">" "newline.txt")} ',shell 命令本质上是echo-xxxxxxxx()xxxxxxxx>newline.txt,这肯定是行不通的。您需要在awk字符串中构造一个正确的 shell 命令,并遵守awks 字符串连接规则,即您的预期脚本应该如下所示(它仍然被破坏,因为$0在生成的 shell 命令中没有正确引用):

awk '/^-/ { system("echo " $0 " > newline.txt") }'

但是,如果您真的只需要echo $0放入一个文件,您可以简单地执行以下操作:

awk '/^-/ { print $0 > "newline.txt" }'

或者更简单

awk '/^-/' > newline.txt

它本质上将默认操作应用于所有匹配的记录/^-/默认操作是 to print,它是整齐打印当前记录的缩写,即此脚本只是过滤掉所需的记录。> newline.txt外部的重定向awk只是将其放入文件中。


推荐阅读