У меня есть файл с тремя столбцами. Я хотел бы удалить третий столбец (редактирование на месте). Как это сделать с помощью awk или sed?
123 abc 22.3
453 abg 56.7
1236 hjg 2.3
Требуемый вывод
123 abc
453 abg
1236 hjg
У меня есть файл с тремя столбцами. Я хотел бы удалить третий столбец (редактирование на месте). Как это сделать с помощью 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 th где N = 3:
awk -i inplace '{$0=gensub(/\s*\S+/,"",3)}1' file
Без GNU awk вам понадобится комбинация match()
+ substr()
или несколько sub()
+ 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 довольно мощный, вы также можете извлекать диапазоны байтов или символов в дополнение к столбцам
выдержка из man-страницы в синтаксисе того, как указать диапазон списка
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
N-M 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