Попробуйте выполнить следующую команду sed
.
sed -i '$s/,$//' foo.csv
Ваш вопрос немного расплывчат в том, что вам нужно.
Если вы хотите только проверить различия, используйте 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.
Обратите внимание, что измененные строки будут представлены одной строкой только в первом файле и другой строкой только во втором файле.