2011-01-20 5 views
2

У меня есть 7 файлов со следующими именами в разных каталогах и подкаталогиКак удалить дублированные строки с несколькими файлами?

tag0.txt, tag1.txt, tag2.txt, tag3.txt, tag01.txt, tag02.txt and tag03.txt 

Некоторые из этих файлов дублировали строки. Как удалить duplicated rows? Обратите внимание, что строки в каждом файле не сортируются, а длина каждого файла составляет от 500 до 1000 строк.

Любая помощь будет высоко оценена.

Спасибо

+1

Вы имеете в виду дублирование в каждом файле или дублирование в нескольких файлах? – majelbstoat

+0

Дублируется в каждом файле – Tony

ответ

4

Предполагая, что вы хотите удалить дубликаты на основедля каждого файла, следующие не требуют отсортированных файлов и таким образом, не нарушается порядок линий:

awk '!a[$0]++' infile > outfile 

С вашего файлы, похоже, находятся в разных каталогах, возможно, проще всего запустить эту команду вручную 7 раз. Если вы действительно хотите, хотя вы можете цикл это следующим образом:

#!/bin/sh 

for file in /path/to/file1 /path/to/file2 ... /path/to/file7; do 
    awk '!a[$0]++' "$file" > "$file".new && \ 
    mv "$file".new "$file" 
done 
+0

К сожалению, мне нравятся одни и те же имена. Нужно ли нам впоследствии переименовывать их? – Tony

+0

@ Тони да, вам нужно переименовать их. Я просто обновил свой цикл while, чтобы сделать это за вас. Я бы сначала сделал резервную копию ваших 7 файлов на всякий случай, если что-то не пойдет правильно. – SiegeX

+0

+1 Вы можете сделать 'awk ... && mv ...', поэтому 'mv' зависит от успеха команды AWK. –

1

использование sort и uniq команды, которые являются UNIX утилитами

cat "your files" | sort | uniq 
+0

+1 Короткие и сладкие. – majelbstoat

+0

-1 Это не сработает для вышеуказанного требования, нет удаления строк из файлов. –

+0

@VCBuddy ничего не мешает вам перенаправлять вывод в фактический файл (но, конечно, не исходный) – dvhh

0

Баш 4,0 ++

shopt -s globstar 
for file in **/tag*.txt 
do 
    sort $file|uniq > t && mv t $file 
done 
+0

' sort | uniq' отличается от 'sort -u'? (реальный вопрос, а не сарказм) –

+0

@glenn AFAIK, нет, нет никакой разницы, если вы не используете какие-либо опции 'uniq'. – SiegeX

+0

К сожалению, globstar не собирается делать многого здесь, потому что его файлы тегов не только в разных subdirs, но и в разных корневых каталогах. – SiegeX

1

Внимание, это изменить файл «непосредственно» (в месте редактирования).

perl -i -ne 'print if not $seen{$ARGV}{$_}++' file1 file2 file3 ... 
Смежные вопросы