Добрый день имеется два файла , file1 file2 , содержание :
file1 file2
1 2
2 1
Нужно чтобы скрипт удалил повторяющиеся строки , а соответственно файл должен остаться пустым.
такой вариант не помог так как строки идут рекурсивно cat list-1 list-2 list-3 | sort | uniq > final.list
и еще кучу примеров смотрел даже добрался до цикла в цикле со считыванием построчно строк но это все грабли. Так что прошу помощи
Нужно чтобы скрипт удалил повторяющиеся строки , а соответственно файл должен остаться пустым.
Не совсем понятно. Вы хотите, удалить из каждого файла только строки, общие для обоих файлов, либо создать третий файл без общих строк? Поясните, а лучше с подробным примером.
изначально существует получить
file1 file2 file3
1 2 3
2 1
3
Идея такова уже существующий скрипт подсчитывает объем почтовых ящиков пользователей и отправляет им письма с "угрозами" , если пользователь не реагирует в течение трех дней его скрипт заносит в черный список в котором можно только принимать любую почту , а отправлять только на локальные адреса. Но есть привилегированные пользователи которым закон не писан , соответственно их нужно удалять из файла.
в порядке бреда:
1. сортируем оба файла
2. делаем diff , на выходе получаем с '>' то что есть только во втором и с '<' то, что есть только в первом....
Грабли в том , что Машина под OS debian введена в домен Windows server , соответственно все юзера как локальные , и как им дать разные квоты я не нашел ответа , этот вопрос я уже задавал на форуме. Вот и пришлось велосипед придумывать , что печально.
Вызов напрямую fgrep, как сказано в man fgrep, устарел, оставлен для совместимости с древними программами, его использующими.
Современное использование — grep -F
"Oleg65" написал:
А файлы почему в таком порядке - снала файл2 затем файл1?
Конструкция -f file2 file1 — обозначает брать образцы (шаблоны) из файла file2 и искать в следующем за ней file1.
То есть -f file2 — это «что искать», а file2 — «где искать».
изначально существует получить
file1 file2 file3
1 2 3
2 1
3
Идея такова уже существующий скрипт подсчитывает объем почтовых ящиков пользователей и отправляет им письма с "угрозами" , если пользователь не реагирует в течение трех дней его скрипт заносит в черный список в котором можно только принимать любую почту , а отправлять только на локальные адреса. Но есть привилегированные пользователи которым закон не писан , соответственно их нужно удалять из файла.
Т.е. в данном случае ищем (сопоставляем) в файле 1 то что есть в файле2 (на повторение). Если бы сопоставляемые файлы были бы в файл1, а больше различных, в т.ч. сопоставляемых, файлов в файл2, то соотвественно выглядело бы -f file1 file2?
Команда fgrep аналогична команде grep, но вместо регулярных выражений она на входе принимает список фиксированных строк,
разделенных символами новой строки. Она эквивалентна команде grep -F. fgrep, как правило, используется с опцией -f, которая считывает шаблоны из файла.
Например, если у вас есть словарный файл с большим количеством строк:
[quote="Oleg65"]Насколько я понял: * - это искомая строка ( скажем aback) в файле my_dictionary_file?
Нет, «*» — любой файл в текущем каталоге.[/quote]
На самом деле несколько сложнее, но, как минимум, все не скрытые (имя начинается не с точки). Именно список всех таких имен файлов, поскольку именно его, а не звездочку, получит grep в командой строке. Раскрытие шаблона в список (глобинг) выполнит шелл перед вызовом grep. Подробнее в руководстве по bash или иному *sh.
Команда fgrep аналогична команде grep, но вместо регулярных выражений она на входе принимает список фиксированных строк,
разделенных символами новой строки. Она эквивалентна команде grep -F. fgrep, как правило, используется с опцией -f, которая считывает шаблоны из файла.
Например, если у вас есть словарный файл с большим количеством строк:
то вы можете без труда проделать поиск этих строк в наборе
входных файлов:
text
$ fgrep -f my_dictionary_file *
Спасибо, виноват, внимательность и бдительность потерял. Список фиксированных строк разделенных символами новой строки! :D
Наверное это старость, зрелостью не назовешь! :D