繁体   English   中英

在Mawk工作; 但不在Awk中

[英]Working in Mawk; but not in Awk

这可能是一个困难的解决方案,可能是一个死了的简单解决方案,使我眼前一亮,而我却看不到它。

在尝试为文件piece1.txt运行此awk命令时:

    awk 'BEGIN { RS = "href=\""; ORS = ""; FS = OFS = "\"" } NR > 1 {  gsub("~", "", $1); gsub("!", "", $1); gsub("%20", "_", $1); gsub("#", "", $1); gsub("$", "", $1); gsub("%", "", $1); gsub("^", "", $1); gsub("&", "_", $1); gsub("@", "", $1); gsub("*", "", $1); gsub("\(", "", $1); gsub("\)", "", $1); gsub(/ /, "_", $1); gsub("____", "_", $1); gsub("___", "_", $1); gsub("__", "_", $1); print RS } 1' piece1.txt

输出错误:

    awk: cmd. line:1: (FILENAME=piece1.txt FNR=2) fatal: Unmatched ( or \(: /(/

它似乎一直运行cmd,直到指定的第一个“ href =“实例为止,然后擦除了txt文件的其余部分。

我被认为是我的代码中有一个我所忽略的问题。 但是奇怪的是,该代码在Debian / Ubuntu发行版(MAWK是默认设置)中完美地工作了。 只有在Mint KDE发行版的GNU Awk中出现此错误。

如果相关:

    > awk --version
    > GNU Awk 4.0.1

有什么帮助吗?

您需要进一步引用正则表达式字符串,因为使用""来封装它们而不是//

awk 'BEGIN { RS = "href=\""; ORS = ""; FS = OFS = "\"" } NR > 1 {  gsub("~", "", $1); gsub("!", "", $1); gsub("%20", "_", $1; gsub("#", "", $1); gsub("$", "", $1); gsub("%", "", $1); gsub("^", "", $1); gsub("&", "_", $1); gsub("@", "", $1); gsub("*", "", $1); gsub("\\(", "", $1); gsub("\\)", "", $1); gsub(/ /, "_", $1); gsub("____", "_", $1); gsub("___", "_", $1); gsub("__", "_", $1); print RS } 1' piece1.txt

这是已更改的部分: gsub("\\\\(", "", $1); gsub("\\\\)", "", $1);

我建议更改您的模式并改为使用// 效率也更高。

您可能还会发现这个更简单:

awk 'BEGIN { RS = "href=\""; ORS = ""; FS = OFS = "\"" } NR > 1 { gsub(/(%20|_)+/, "_", $1); gsub(/[~!#$%^&*()@]/, "", $1); print RS } 1' piece1.txt

要么

awk 'BEGIN { RS = "href=\""; ORS = ""; FS = OFS = "\"" } NR > 1 { gsub(/%20/, "_", $1); gsub(/[~!#$%^&*()@]/, "", $1); gsub(/_+/, "_", $1); print RS } 1' piece1.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM