从文本文件中删除重复和周围的行

时间:2015-04-06 22:11:37

标签: bash awk sed

所以我今天早些时候发布了一个可能不必要的复杂问题,所以希望这里的版本更清晰。

我正在尝试编辑文本文件并删除它们周围的重复行和行。所以该文件看起来像数千行:

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 个答案:

答案 0 :(得分: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