Я предполагаю, что Вы используете стандартную установку человечности, таким образом с помощью ext4 файловой системы. При запрете вручную прохождения через образа диска и соединения файлов (который является вне моего знания) я думаю, что единственная опция состояла бы в том, чтобы использовать утилиту восстановления после удаления (как: http://extundelete.sourceforge.net/)
Вплоть до я просто погуглил его, я на самом деле думал, что не было возможно легко восстановить файлы на ext3/4, и я никогда не использовал вышеупомянутую утилиту.
Для использования его необходимо будет загрузить живой дистрибутив Linux (например, knoppix) и загрузить виртуальную машину с тем образом диска, смонтированным в виртуальном CD-приводе. Определенно не загружайте свой VM нормальным способом, или он сделает восстановление данных еще тяжелее!
В sed
:
sed 's! \([^ ]\+\)\( \|$\)!\1 !g' your_file
Это сделает замены и распечатает результат к стандарту. Для изменения файла на месте добавьте -i
переключатель:
sed -i 's! \([^ ]\+\)\( \|$\)!\1 !g' your_file
Объяснение
Это sed
команда будет искать пространство, сопровождаемое по крайней мере одним непробелом, сопровождаемым пространством или концом строки. Это заменяет этой последовательностью с любыми непробелами, которые это нашло сопровождаемым одиночным пробелом. Замена применяется максимально много раз через строку (это называют глобальной заменой), потому что g
модификатор предоставляется в конце. Так, в основном, с последовательностью как A B C
, sed
найдет шаблон "B" и заменит им с "B", оставляя Вас с AB C
как конечный результат.
Предположения сделаны этим кодом
Этот код предполагает, что пробелы между Вашими столбцами являются действительно пробелами и не ВКЛАДКАМИ, например. Это может быть легко зафиксировано за счет удобочитаемости:
sed 's![[:blank:]]\+\([^[:blank:]]\+\)\([[:blank:]]\+\|$\)!\1 !g' your_file
awk:
awk '{printf $1$2;for(i=3; i<=NF;i+=2){printf " %s",$i$(i+1)}print}' file
Это, вероятно, будет самым быстрым из двух для больших файлов.
Perl:
perl -pe 's/([^\s]+)\s+([^\s]+)/$1$2/g' file
Если Ваш файл действительно имеет это много столбцов, одна опция состоит в том, чтобы использовать простофилю для обработки каждого столбца как записи путем установки RS
к "одному или нескольким пробельным символам". Это помогает избежать необходимости настраивать цикл через столбцы. Обратите внимание, что это решение хрупко перед лицом нечетного числа столбцов в строке.
awk --re-interval -v RS='[[:space:]]{1,}' '{x=$0; getline; printf x$0RT}' file