我有一个具有以下特征的文本文件:
- 每行至少有三个由空格分隔的“单词”
- “单词”可以是任何字符或字符串
我在一些行中附加了一些注释,并提出了对原始单词进行更改的初步建议,现在想使用 sed 为我进行这些更改。因此,为了提供更清晰的图片,我的文件如下所示:
NO NO O
SIGNS NN O #NNS
GIVEN VBD B-VP #VBN
AT IN O
THIS NN O
TIME NN O ## B-NP
. PER O
...
带 1 # 的注释用于替换一行中的第二个单词,带 2 # 的注释用于替换一行中的第三个单词。有人能建议一种使用 sed (或 awk 或其他任何东西)来做到这一点的方法吗?再次澄清(希望如此),我的目标是获取 # 或 ## 后面的模式,并用匹配的模式替换该行的第 n 个单词。
Thanks.
这对你有用:
awk '/#/{sub(/# +/,"#");n=gsub(/#/,"",$NF);$(n+1)=$NF;$NF="\t\t#"}1' file
解释
-
/#/{ ... }
:搜索包含以下内容的行#
并执行以下步骤...
-
sub(/# +/,"#")
:删除注释和注释之间的所有空格#
如果需要的话
-
n=gsub(/#/,"",$NF)
: 移除所有#
从最后一个字段开始$NF
并设置数量#
被移除到变量中n
-
$(n+1)=$NF
:设置n+1字段$(n+1)
到新的最后一个字段$NF
其中有所有的#
剥去
-
$NF="\t\t#"
:设置最后一个字段$NF
到两个选项卡,然后是#
-
1
: 捷径告诉awk
打印更改后的行
-
file
:您的输入文件
Example
$ awk '/#/{sub(/# +/,"#");n=gsub(/#/,"",$NF);$(n+1)=$NF;$NF="\t\t#"}1' file
NO NO O
SIGNS NNS O #
GIVEN VBN B-VP #
AT IN O
THIS NN O
TIME NN B-NP #
. PER O
...
Note
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)