удалить столбец с awk или sed

У меня есть файл с тремя столбцами. Я хотел бы удалить третий столбец (редактирование на месте). Как я могу сделать это с помощью awk или sed?

123 abc 22.3 453 abg 56.7 1236 hjg 2.3 

Желаемый выход

 123 abc 453 abg 1236 hjg 

Это может сработать для вас (GNU sed):

 sed -i -r 's/\S+//3' file 

Если вы хотите удалить пробел перед третьим полем:

 sed -i -r 's/(\s+)?\S+//3' file 

попробуйте эту короткую вещь:

 awk '!($3="")' file 

С GNU awk для редактирования inplace, \s/\S и gensub() для удаления

1) поле FIRST:

 awk -i inplace '{sub(/^\S+\s*/,"")}1' file 

или

 awk -i inplace '{$0=gensub(/^\S+\s*/,"",1)}1' file 

2) поле LAST:

 awk -i inplace '{sub(/\s*\S+$/,"")}1' file 

или

 awk -i inplace '{$0=gensub(/\s*\S+$/,"",1)}1' file 

3) N- е поле, где N = 3:

 awk -i inplace '{$0=gensub(/\s*\S+/,"",3)}1' file 

Без GNU awk вам нужно match() + substr() комбо или несколько sub() s + vars, чтобы удалить среднее поле. См. Также Печать всех, кроме первых трех столбцов .

Кажется, вы могли бы просто пойти с

 awk '{print $1 " " $2}' file 

Это печатает два первых поля каждой строки в вашем входном файле, разделенные пробелом.

Попробуй это :

 awk '$3="";1' file.txt > new_file && mv new_file file.txt 

или

 awk '{$3="";print}' file.txt > new_file && mv new_file file.txt 

GNU awk 4.1

 awk -i inplace NF-- 

Это приведет к удалению последнего поля каждой строки.

Попробуйте использовать вырез … его быстрый и легкий

Сначала у вас есть повторяющиеся пробелы, вы можете сжать их до одного пробела между столбцами, если это то, что вы хотите с tr -s ' '

Если в каждом столбце имеется только один разделитель, вы можете использовать cut -d ' ' -f-2 для печати полей (столбцов) <= 2.

например, если ваши данные находятся в файле input.txt, вы можете выполнить одно из следующих действий:

 cat input.txt | tr -s ' ' | cut -d ' ' -f-2 

Или, если вам лучше рассуждать об этой проблеме, удалив третий столбец, вы можете написать следующее

 cat input.txt | tr -s ' ' | cut -d ' ' --complement -f3 

cut довольно мощный, вы также можете извлекать диапазоны байтов или символов в дополнение к столбцам

выдержка из справочной страницы о синтаксисе того, как указать диапазон списка

 Each LIST is made up of one range, or many ranges separated by commas. Selected input is written in the same order that it is read, and is written exactly once. Each range is one of: N N'th byte, character or field, counted from 1 N- from N'th byte, character or field, to end of line NM from N'th to M'th (included) byte, character or field -M from first to M'th (included) byte, character or field 

так что вы также могли бы сказать, что вам нужны конкретные столбцы 1 и 2 с …

 cat input.txt | tr -s ' ' | cut -d ' ' -f1,2 
  • Удаление цветовых кодов ANSI из текстового потока
  • Извлечение данных из простого XML-файла
  • Как использовать разные разделители для команды sed substitute?
  • Как добавить к концу строки, содержащие шаблон с sed или awk?
  • sed заменить переменной на несколько строк
  • заменить неизвестную строку между двумя известными строками с помощью sed
  • Пакетное переименование файлов в каталоге с помощью sed
  • Удалить строки в текстовом файле, который содержит определенную строку
  • Почему sed требует 3 обратных косых черт для регулярной обратной косой черты?
  • Использование sed, Вставить строку ниже (или выше) шаблона?
  • Как выполнить рекурсивный поиск / замену строки с помощью awk или sed?
  • Interesting Posts

    Android – Как передать HashMap между действиями?

    Как снова вырезать аудиофайлы с компакт-диска?

    Могу ли я запустить 3 монитора с бортовой плюс дискретной графической картой?

    Могу ли я изменить переменную окружения PATH в Windows 7 без перезагрузки?

    не может преобразовать ‘std :: basic_string ‘ в ‘const char *’ для аргумента ‘1’ в ‘int system (const char *)’

    Список различных типов?

    Проблемы с функцией C scanf (“% c”) для чтения символов один за другим

    Изображение с высоким разрешением – OutOfMemoryError

    Windows 7 может выполнять ping, но не может видеть устройство в другой подсети

    Почему флеш-видео потребляет столько CPU?

    Антивирус в реальном времени в Ubuntu

    Автоматизация адаптера Loopback устанавливается в Windows

    Отсутствует комментарий XML для общедоступного типа или члена

    Как перенести данные в столбцы на строки?

    jqGrid необходимо изменить поле в диалоговом окне «Добавить», но не в диалоговом окне «Редактировать»

    Давайте будем гением компьютера.