Удалить дублирующую строку в нескольких текстовых файлах (цикл) - PullRequest
0 голосов
/ 30 ноября 2018

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

Например, допустим, у меня есть 3 текстовых файла.

File1.txt

1
2
3
4

File2.txt

3
4
5
6

File3.txt

6
7
8

Сначала я хочу проверить File1.txt на File2.txt и удалить дубликатызначения из File2.txt.

Далее File1.txt с File3.txt

, а затем File2.txt с File1.txt

File2.txt с File3.txt

... и т.д.

Я использую grep -vf File1.txt File2.txt > File2.txt для удаления дублирующихся значений в файлах, но яЯ не уверен, как поместить это в цикл.

Я попробовал следующее, но это не сработало.

for f in *.txt; do
for f2 in *.txt; do
grep -vf $f $f2 > $f.txt;
done

Спасибо.

1 Ответ

0 голосов
/ 01 декабря 2018

В вашем подходе есть некоторая путаница.Я думаю, это то, что вам нужно:

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

let A \ B определяет разность наборов (удалить общие элементы из A).Затем просто

file1.new = file1
file2.new = file2 \ file1
file3.new = (file3 \ file1) \ file2

нет необходимости возвращаться назад и снова выполнять file1 и file2.

Преобразование в код:

$ function diff() { grep -vFf "$2" "$1"; }
$ cp file1 file1.new
$ diff file2 file1 > file2.new
$ diff <(diff file3 file1) file2 > file3.new

$ head file?.new

==> file1.new <==
1
2
3
4

==> file2.new <==
5
6

==> file3.new <==
7
8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...