2015-04-06 85 views
-1

因此,我今天早些时候发布了一个可能不必要的复杂问题,所以希望这里有一个更清晰的版本。从文本文件中删除重复和周围的线

我想编辑一个文本文件,并删除重复的行和周围的线。因此,文件看起来像这样的数千行:

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 
+1

请给出你试过的,SO不是免费的编码服务。 – Barmar

+0

我建议看一下Linux [unique](http://www.thegeekstuff.com/2013/05/uniq-command-examples/)。至少你已经尝试了一些东西,并把你的方法放在这里。 –

+0

好友,这是壳牌,不是Python! –

回答

2

没什么特别的,但我认为它应该工作,假设与数据开始并持有一行之前的结构和两行之后需要检查的行重复:

$ 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