【发布时间】:2017-05-17 00:41:39
【问题描述】:
我有一个文本文件,其中包含以“WordNode”和“gloss word”开头的互换行,但有时会有以“gloss word”开头的重复行:
WordNode"a'inai"
gloss word "repose"
WordNode "akti"
gloss word "running"
gloss word "turned on"
gloss word "active"
WordNode "aitco"
gloss word "Armenian"
WordNode "aitxero"
gloss word "ethereal"
gloss word "ether"
我希望能够将上一个 wordNode... 行添加到以“gloss word”开头的每个重复行:
WordNode "a'inai"
gloss word "repose"
WordNode "akti"
gloss word "running"
WordNode "akti"
gloss word "turned on"
WordNode "akti"
gloss word "active"
WordNode "aitco"
gloss word "Armenian"
WordNode "aitxero"
gloss word "ethereal"
WordNode "aitxero"
gloss word "ether"
我试过了
sed -r ':a; N; /(gloss word)[^\n]*\n\1/ s/\n.*//; ta; P; D' file1.txt > file2.txt
但它只保留第一行并删除以下重复行。使用 sed awk 或任何其他正则表达式执行此操作的正确方法是什么?
【问题讨论】:
-
您在我的回答中评论了
But this doesn't change the data at all。这是什么意思?你没有看到我给出的Awk命令的输出? -
@Inian 这似乎很奇怪......即使是dos风格的行尾也不会影响...... OP确实必须澄清
-
“这根本不会改变数据”我的意思是在运行代码时不会对数据进行任何更改。我想再试一次,但它被删除了。我认为@suddeep 的答案和你的一样,尝试去掉以 wordnodes 开头的行并留下以 Gloss word 开头的行。我是这个正则表达式的新手,也许我犯了一个错误。 :/幸运的是,波通的回答完全符合我的要求。谢谢大家!
-
@BitTad
awk答案给出的所有工作都符合您的示例输入的预期......要么你在尝试它时犯了一个错误,要么你拥有的awk版本有些奇怪......在任何案例,如果您对 potong 的回答感到满意,则应将其标记为已接受...见stackoverflow.com/help/someone-answers