
Мне интересно, как я могу сделать это эффективно. Имея два файла, скажем a.txt и b.txt, я хочу написать bash-скрипт, чтобы сделать следующее:
Каждая строка в файле a.txt, содержащая «*», которой нет в файле b.txt, будет добавлена в конец файла b.txt с отметкой времени.
Первую и последнюю части я могу сделать,
grep "*" a.txt echo "$(date)" >> b.txt
а вот как насчет остального — не знаю.
решение1
Я предлагаю вам использовать третий файл для результатов, чтобы не портить файл b.txt. Вы можете попробовать это:
cp b.txt c.txt
for line in $(grep '*' a.txt); do
# for each line found in a.txt
echo "Found: $line"
grep -q $line b.txt # check its presence in b.txt
if [ $? -ne 0 ]; then
# if the result of the grep is not equal to 0
# it means that the line has not been found in b.txt
# then print the line in a third file with the leading timestamp
echo "$(date): $line" >> c.txt
fi
done
Понятно, что, возможно, вам следует просто улучшить grep, поскольку я не знаю, из чего состоит строка, в которой вы ищете «*».