从文本文件中删除重复和周围的线
问题描述:
因此,我今天早些时候发布了一个可能不必要的复杂问题,所以希望这里有一个更清晰的版本。从文本文件中删除重复和周围的线
我想编辑一个文本文件,并删除重复的行和周围的线。因此,文件看起来像这样的数千行:
Info1
Blue
Info1
Info1
Info2
Red
Info2
Info2
Info3 <- Delete line above
Blue <- Delete Duplicate
Info3 <- Delete two lines below
Info3 <- Delete two lines below
我想编辑或使所有重复行和它们周围的信息被删除创建的输出文件。所以从上面的示例输出将是:
Info1
Blue
Info1
Info1
Info2
Red
Info2
Info2
如这里要求是什么,我已经开始尝试:
#Iterates through multiple files
for f in /dir/*; do
mv "$f" "$f~" &&
#unzip and set 2nd line and every fourth line to temp var
#but then not really sure what to do after this
gzip -cd "$f~" | sed '2~4s/ = $temp' | gzip > "$f"
done
答
没什么特别的,但我认为它应该工作,假设与数据开始并持有一行之前的结构和两行之后需要检查的行重复:
$ cat brg.txt
Info1
Blue
Info1
Info1
Info2
Red
Info2
Info2
Info3
Blue
Info3
Info3
Info4
Green
Info4
Info4
$ cat brg.awk
NR % 4 == 1 { save = $0 }
NR % 4 == 2 && $0 in seen { flag = 0 }
NR % 4 == 2 && !($0 in seen) { flag = 1; seen[$0]; print save; print }
NR % 4 == 3 && flag
NR % 4 == 0 && flag
$ awk -f brg.awk brg.txt
Info1
Blue
Info1
Info1
Info2
Red
Info2
Info2
Info4
Green
Info4
Info4
+0
可能更好地阅读文件两次。看看我发布到以前的相关问题的例子:http://stackoverflow.com/a/29480682/1983854 – fedorqui
请给出你试过的,SO不是免费的编码服务。 – Barmar
我建议看一下Linux [unique](http://www.thegeekstuff.com/2013/05/uniq-command-examples/)。至少你已经尝试了一些东西,并把你的方法放在这里。 –
好友,这是壳牌,不是Python! –