удалить столбец с awk или sed
У меня есть файл с тремя столбцами. Я хотел бы удалить третий столбец (редактирование на месте). Как я могу сделать это с помощью awk или sed?
123 abc 22.3 453 abg 56.7 1236 hjg 2.3
Желаемый выход
123 abc 453 abg 1236 hjg
- На месте редактирования с sed на OS X
- Новые строки в sed на Mac OS X
- Как использовать замену новой строки в BSD sed?
- Поиск файлов с похожим именем в папку
- Как извлечь текст из строки с помощью sed?
- Возможно ли избежать метасимволов регулярных выражений с помощью sed
- Удалите первые N строк файла в командной строке unix
- sed поиск и замена строк, содержащих /
- Как удалить конечные пробелы с sed?
- Как обращаться к ошибке «bash:! D»: событие не найдено »в подстановке команды Bash
- Нежелательное (неохотное) соответствие регулярному выражению в sed?
- Как вставить новую строку перед шаблоном?
- Как заменить всю строку в текстовом файле по номеру строки
Это может сработать для вас (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