как удалить две последние "-разделенные строки из каждой строки в большом файле

В качестве предупреждения: у меня нет опыта работы с mhddfs, но есть несколько общих правил:

Все примеры, упомянутые в файле readme mhddfs, основаны на монтировании новой точки монтирования, а не существующий.

Таким образом, просто наложение наложения поверх уже смонтированной точки не упоминается.

Также подумайте, что вы делаете в этот момент:
/dev/sda1 очень похож на ваш загрузочный и корневой раздел.

Даже если вы можете перемонтировать его с помощью любого инструмента, откуда вы знаете, что добавляются нужные файлы для новых ядер Linux?

Мой совет:
Выясните, какие каталоги становятся довольно большими. Попробуйте переместить этот каталог на новый диск.

На основе вашего примера:
$ df -h Используемый размер файловой системы Доступно Использование % Установлено на /dev/sda1 76G 58G 15G 80%/ /dev/sdb1 197G 188M 187G 1% /mnt/sdb1 [...]

Попробуйте:
sudo du -hs /*

У вас может получиться 50 ГБ данных в /home

Если это так, вы можете скопировать все из /home в /mnt/ sdb1/
если вы это сделали:
размонтировать /dev/sdb1
переименовать /home в /home_old
mkdir /дом
и смонтируйте /dev/sdb1 в /home

эта новая точка монтирования будет настроена в /etc/fstab:

Как вы можете видеть: вам не нужны дополнительные волшебные инструменты - это стандартная работа администратора unix ;-)

1
18.05.2017, 04:30
4 ответа

Эта команда sed удалит две последние строки в кавычках, разделенные пробелами, из конца каждой строки из файла infile и отправит результаты в outfile:

sed 's/ *"[^"]*" *"[^"]*" *$//' < infile > outfile
2
27.01.2020, 23:14

Если вы знаете, что всегда хотите удалить два последних столбца, можно использовать эту идиому:

awk 'NF-=2' file

Я заметил, что это не работает с nawk, не конечно почему. Переносимый способ заключается в принудительном разделении поля с помощью `$1=$1:

awk '{NF-=2} $1=$1' file

Вывод:

"text1" "text2" "text3" "text4"
4
27.01.2020, 23:14
awk '{$(NF-1)=$NF=""}1'  inp

perl -pale '$_ = "@F[0..@F-3]"' inp

sed -ne '
   s/" "/"\
"/g
   :a
   s/\n/ /
   /\n.*\n.*\n/ba
   P
' inp

Пояснение:

    Код
  • awkобнуляет последнее и второе -последнее поля и печатает.
  • В perlполя сохраняются в массиве @Fи sliceот 0-го до третьего -последнего выбираются и сохраняются в текущей строке $_. Двойные кавычки нужны для преобразования массива ->string в xformation и объединены $"superglobal, значением по умолчанию является пробел. -pЗатем параметр Perl переносит значение $_в стандартный вывод.
  • В sedмы сначала переворачиваем все шаблоны" "---> "\n", затем входим в цикл, в котором мы возвращаем \nдо тех пор, пока не останется два. В этот момент мы используем команду p, Pв верхнем регистре, чтобы распечатать первую часть пространства шаблонов.
1
27.01.2020, 23:14

Печать каждого поля до последнего -2..AWK предоставил нам количество полей в строке, используя переменную NF

echo "text1" "text2" "text3" "text4" "text5" "text6" | awk  -v ORS=""  '{
for(i=1;i<=NF-2;i++)print $i, " " ; print "\n"}'
0
27.01.2020, 23:14

Теги

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