Сравните 2 файла и запустите сценарий, если есть разница

Попробуйте выполнить следующую команду sed.

sed -i '$s/,$//' foo.csv
0
17.10.2019, 11:54
1 ответ

Ваш вопрос немного расплывчат в том, что вам нужно.

Если вы хотите только проверить различия, используйте cmp -s oldfile newfile. Это завершится с истинным статусом, если файлы одинаковы:

if cmp -s oldfile newfile
then echo files are the same
else echo files are different
    ./text_processing.sh...
fi

Если вы хотите проверить, увеличился ли размер файла, вы можете использоватьwc -c(для подсчета символов ),wc -l(для подсчета строк )или stat --format=%s, который напрямую использует метаданные о файле. файл, чтобы указать общий размер в байтах.

if [ $(wc -c oldfile) -lt $(wc -c newfile) ]
then echo oldfile is smaller
    ./text_processing.sh...
fi

$(... )запускает прилагаемую команду и подставляет ее вывод в командную строку. [... -lt... ]проверяет, является ли первый аргумент l меньше , чемвторой аргумент.

Если вы специально хотите проверить, была ли добавлена ​​строка, то лучше всего сначала отсортировать оба файла, а затем использовать commдля фильтрации общих строк:

sort -o oldfile.sorted oldfile
sort -o newfile.sorted newfile
if [ $(comm -13 oldfile.sorted newfile.sorted | wc -l) -gt 0 ]
then echo 'line(s) only found in newfile'
    ./text_processing.sh...
fi

comm -13соответствует строкам из обоих файлов. Обычно выводится каждая строка с отступом, показывающим, встречается ли строка только в первом файле, только во втором файле или в обоих. С помощью -13строки только из первого файла и общие строки подавляются, поэтому выводятся только те строки, которые встречаются во втором файле. Это передается в wc -l, который считает строки и проверяется, что он больше 0.

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

1
28.01.2020, 02:39

Теги

Похожие вопросы