Не могли бы вы попробовать следующее (проверено в GNU awk
).Для сохранения результатов на месте добавьте > temp_file && mv temp_file Input_file
к следующим кодам.
awk 'NF=4' Input_file
Объяснение: NF
это awk
из коробкипеременная, которая указывает количество полей в текущей строке (по умолчанию он рассматривает разделитель полей как пробел), поэтому я вручную устанавливаю его значение равным 4 здесь, согласно вопросу OP.Теперь awk
работает с методом pattern / condition и action, поэтому здесь никаких действий не предусмотрено, поэтому по умолчанию будет печататься текущая строка с отредактированным количеством полей.
ИЛИ вы также можете использовать следующие, как указаноавтор ghoti в комментариях.
awk '{NF=4;$1=$1}1' Input_file
Решение 2-е: Добавление решения sed
тоже сейчас.Учитывая, что ваш фактический Input_file такой же, как показанные примеры.Для сохранения вывода в сам файл Input_file используйте опцию sed -i
для следующего кода.
sed 's/\(.* is [^ ]*\)\(.*\)/\1/' Input_file
Решение 3-е: В случае, если ваша система имеет gensub
in awk
GNU один, то следующее может помочь вам здесь.
awk '{reg="(.* is [^ ]*).*";print gensub(reg, "\\1", 1, $0)}' Input_file