Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk-无法指定FS_Awk - Fatal编程技术网

awk-无法指定FS

awk-无法指定FS,awk,Awk,我正在用awk处理nroff格式的手册页,以提取每个命令的选项。。。我发现选项以\fB开头,然后是实际选项,可能还有\fP和选项参数等等 例如: \fB\-\-author\fR 我开始编写一个awk脚本,指定FS=“\fB”。。。嗯,它不起作用了。。。我试图跳出\,切换到FS=“\\fB”,但也没有成功。。。我做错了什么 这是我的剧本: BEGIN { FS = "\\f." # "\\\\f." didn't work either } { print $2 } 这是

我正在用awk处理nroff格式的手册页,以提取每个命令的选项。。。我发现选项以
\fB
开头,然后是实际选项,可能还有
\fP
和选项参数等等

例如:

\fB\-\-author\fR
我开始编写一个awk脚本,指定
FS=“\fB”
。。。嗯,它不起作用了。。。我试图跳出
\
,切换到
FS=“\\fB”
,但也没有成功。。。我做错了什么


这是我的剧本:

BEGIN {
    FS = "\\f." # "\\\\f." didn't work either
}

{
    print $2
}
这是输入

\fB-o\fP


我想要2美元的地方-o。但它就是不起作用。

看起来你可以用4个反斜杠来完成这一点:

$ echo "1\z2\z3" | awk 'BEGIN { FS = "\\\\z" } ; {print $3 $1}'
31

当bash解析这个时,它应该将4个反斜杠换成2个文字反斜杠;然后,awk将把这两个反斜杠换成一个文字反斜杠。

字段分隔符
FS
用于类似CSV的数据。在您的情况下,找到过滤器的选项,然后删除不需要的部件:

/\\fB/ { ... process option ...}

我记得有一次我碰到过这个

真正的问题是,awk的一些版本坚持FS是单个字符

我记得,解决方法是手动将文件拉入GNU Emacs,将多字符FS向下编辑为文件中其他地方未使用的一个字符,使用适当的FS对其进行awk,然后手动修复


你可以用两个SED脚本自动完成一个脚本,一个做初始记录,一个修复它,中间的AWK步骤。

正确,你需要从反斜杠中逃脱两次,因为引号(“”)移除一个逃逸。选择正确的行只是故事的一部分。获得有趣的领域是OP想要的。