Как удалить дублирующиеся строки с несколькими файлами? - PullRequest
2 голосов
/ 20 января 2011

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

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

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

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

Спасибо

Ответы [ 4 ]

4 голосов
/ 20 января 2011

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

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
1 голос
/ 20 января 2011

Внимание, файл изменяется "напрямую" (редактирование на месте).

perl -i -ne 'print if not $seen{$ARGV}{$_}++' file1 file2 file3 ...
1 голос
/ 20 января 2011

use sort и uniq команда, которая является утилитой Unix

cat "your files" | sort | uniq
0 голосов
/ 20 января 2011

Баш 4.0 ++

shopt -s globstar
for file in **/tag*.txt
do
    sort $file|uniq > t && mv t $file
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...