从文本文件中删除重复的行和周围的行
Remove Duplicate and Surrounding Lines From Text File
所以我今天早些时候发布了一个可能不必要地复杂的问题,所以希望这里有一个更清晰的版本。
我正在尝试编辑一个文本文件并删除重复的行和它们周围的行。所以文件看起来像这样有数千行:
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 = [=10=] }
NR % 4 == 2 && [=10=] in seen { flag = 0 }
NR % 4 == 2 && !([=10=] in seen) { flag = 1; seen[[=10=]]; 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
所以我今天早些时候发布了一个可能不必要地复杂的问题,所以希望这里有一个更清晰的版本。
我正在尝试编辑一个文本文件并删除重复的行和它们周围的行。所以文件看起来像这样有数千行:
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 = [=10=] }
NR % 4 == 2 && [=10=] in seen { flag = 0 }
NR % 4 == 2 && !([=10=] in seen) { flag = 1; seen[[=10=]]; 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