Наконец-то нашел ответ от кого-то другого на другом сайте, просто обнулил иноды и перепроверил систему, вот и все!
debugfs -w /dev/sda2 :clri <1415> :clri <1416> :clri <1417> :q fsck -y /dev/sda2
Для всех остальных, кто столкнулся с этой проблемой, я нашел плохие inodes, используя find
на плохом монтировании, затем проверил dmesg
на наличие ошибок на плохих inodes.
1) Is it possible to merge this way the files through an appropriate bash script?
При условии:
file_2
в основном file_1
с добавленными и удаленными строками , но не перемещенными и GNU diff
дает ключ к простому решению:
#!/usr/bin/env bash
diff -y "$1" "$2" | while IFS=$'\t' read s1 s2 s3; do
if [[ $s1 == *\> ]]; then
# New line from second file
echo "$s2"
else
case "$s2" in
*\|) # Changed line, so...
echo "$s1"
echo "$s3"
;;
*) # Output first file
echo "$s1"
;;
esac
fi
done
Это отправляет унифицированный вывод на стандартный вывод, где вы можете делать с ним все, что захотите. Я предлагаю сначала проверить вывод, вместо того, чтобы слепо перезаписывать как file_1
, так и file_2
.
(Если вам интересно, как это работает, запустите diff -y file_1 file_2 | cat -A
, чтобы увидеть, что на самом деле содержится в выводе diff
.)
2) Is it possible to do the same, when instead of lines I have paragraphs, that is: blocks of lines?
Да. Основная логика та же, что и выше, но вы должны сначала преобразовать абзацы в отдельные строки и использовать переформатированные тексты в качестве входных данных для diff
выше. Затем у вас есть два варианта вывода:
echo
в приведенном выше скрипте становится echo... | fmt -w<desire_line_width>
. Это проблема по существу выполнения2 -двухстороннегоилидвунаправленного -слияниямежду двумя файлами с синхронизацией различий между ними. Мой собственный -случай использования для этого заключался в выполнении обновлений в репозитории GitHub и сохранении уникальных данных в файле переменных, чтобы предотвратить повторное -их включение при каждом обновлении!
Сначала я покажу вам выражение и используемые тестовые данные, чтобы вы могли воссоздать результаты для проверки(просто измените разделитель полей с '=' на пустое место ' ' для вашего набора данных):
paste -d'\n' file1.txt file2.txt|awk -F'=' '!seen[$1]++' > file3.txt
Мои тестовые данные выглядят так:
файл1.txt:
LineA='value1'
LineB='value2'
LineC='value3'
LineD='value4'
#
LineE='value5'
LineF='value6'
#
LineG='value7'
#
LineH='value8'
файл2.txt:
LineA=''
LineB=''
NEWVARIABLE1='This only Exists in file2.txt Under LineB'
LineC=''
LineD=''
#
LineE=''
NEWVARIABLE2='This only Exists in file2.txt Under LineE'
LineF=''
#
LineG=''
#
LineH=''
NEWVARIABLE3='This only Exists in file2.txt under LineH'
Выход:
paste -d'\n' file1.txt file2.txt|awk -F'=' '!seen[$1]++' > file3.txt
Комбинированный файл3.txt выглядит так:
LineA='value1'
LineB='value2'
LineC='value3'
NEWVARIABLE1='This only Exists in file2.txt Under LineB'
LineD='value4'
#
LineE='value5'
LineF='value6'
NEWVARIABLE2='This only Exists in file2.txt Under LineE'
LineG='value7'
LineH='value8'
NEWVARIABLE3='This only Exists in file2.txt under LineH'
Обратите внимание, что в файле 2 .txt все значения пусты ('' ), кроме значенийNEWVARIABLEx . Просмотрев вывод, вы можете увидеть, что все уникальные данные из файла 1 .txt были сохранены после слияния.
Также обратите внимание, что каждое новое «переменное» понижение добавляет в файл2.txt («обновляемый» файл )на 1 строку в объединенном файле3.txt. Таким образом, если вы добавите 4 новые переменные в файл 2.txt, в объединенном файле 3.txt ЧЕТВЕРТАЯ новая переменная будет на 4 строки ниже в файле 3.txt. Однако в моем случае использования это не проблема.
К сожалению, это сработает в вашем ПЕРВОМ случае использования -при выполнении2 -слияния файлов. Однако, если вы снова добавите непрерывный блок теста в файл2.txt (, «обновленный файл )будет чередоваться с окружающими строками из файла 1 .txt в объединенном файле 3 .txt Итак, я понял вас наполовину, но мой вариант использования совпадает с вашим только в первой части вашего вопроса.
Я испробовал множество различных решений, предложенных другими авторами на этом и других форумах.но это был действительно единственный, кто делал бизнес. ХТХ-