Описание тега gnote
Можно установить SQLite базы данных и выполнить SQL выбирает из того, что, вероятно, будет чище, чтобы реализовать и настроить вас на более портативный позже.
Но вот примерное представление. Скажем, у меня есть 2 файла:
долларов больше index.txt new_vals.txt
::::::::::::::
index.txt
::::::::::::::
1_,2_,4_,5_
::::::::::::::
new_vals.txt
::::::::::::::
5_,2_,1_,4
2_,5_,1_,4
С помощью этой команды мы можем соответствовать:
$ я $(<new_vals.txt); делать нумс=${я//_,/}; \
грэп -ое "[${ключ}_,]+" index.txt; сделано
1_,2_,4_,5_
1_,2_,4_,5_
Это показывает, что мы можем соответствовать каждой линии от new_vals.txt
к существующей линии index.txt
.
Обновление #1
На основе редактирования ОП по Следующие будет делать то, что он хочет, используя модификацию вышеуказанного подхода.
$ я $(<new_vals.txt); делать
нумс=${я//_,/}
е "# проверка: [%с]" $я
к=$(грэп -ое "[${ключ}_,]+" index.txt | команда grep "[[:цифра:]]_$")
е "==> матч: [%с]\н" $к
сделано
С модифицированной версией тестовых данных:
долларов больше index.txt new_vals.txt
::::::::::::::
index.txt
::::::::::::::
1_,2_,4_,5_
0_,2_,3_,9_
::::::::::::::
new_vals.txt
::::::::::::::
5_,2_,1_,4_
2_,5_,1_,4_
1_,1_,1_,1_
1_,2_,4_,4_
Теперь, когда мы запускаем выше (положить внутрь скрипта для простоты, парсер.Баш
):
$ ./парсер.Баш
# проверка: [5_,2_,1_,4_] ==> матч: [1_,2_,4_,5_]
# проверка: [2_,5_,1_,4_] ==> матч: [1_,2_,4_,5_]
# проверка: [1_,1_,1_,1_] ==> матч: []
# проверка: [1_,2_,4_,4_] ==> матч: []
Как это работает
Описанный выше метод работает, используя некоторые ключевые характеристики выставлены по характеру ваших данных. Например. Только матчи будут заканчиваться цифрой следует подчеркнуть. В команде grep "[[:цифра:]]_$"
выбирает только этих результатов.
Другая часть скрипта, грэп -ое "[${ключ}_,]+" index.txt
выберем строки, которые содержат символы из строки в файле new_vals.txt
которые соответствуют строки из index.txt
.
Дополнительные корректировки
Если природа данных такова, что строки могут быть разной длины, то 2-я команда grep должна быть расширена, чтобы гарантировать, что мы выбираем строки, которые имеют достаточную длину. Существует несколько способов для достижения этой цели, либо за счет расширения шаблону или с помощью счетчика, возможно, используя душ
или некоторые другие средства, которые бы подтверждали, что матчи определенного типа.
Расширяя его, например, так:
к=$(грэп -ое "[${ключ}_,]+" index.txt | \
команда grep "[[:цифра:]]_,[[:цифра:]]_,[[:цифра:]]_,[[:цифра:]]_$")
Позволит для ликвидации строки вроде этой:
$ ./parser2.Баш
# проверка: [5_,2_,1_,4_] ==> матч: [1_,2_,4_,5_]
# проверка: [2_,5_,1_,4_] ==> матч: [1_,2_,4_,5_]
# проверка: [1_,1_,1_,1_] ==> матч: []
# проверка: [1_,2_,4_,4_] ==> матч: []
# проверка: [1_,2_,5_] ==> матч: []