Как заменить содержимое определенного столбца с помощью awk?


31

Дано: в записи 40 столбцов. Я хочу заменить 35-й столбец, чтобы 35-й столбец был заменен содержимым 35-го столбца и символом «$». Что пришло в голову, это что-то вроде:

awk '{print $1" "$2" "...$35"$ "$36...$40}'

Это работает, но потому что это невозможно, когда число столбцов достигает 10 КБ. Мне нужен лучший способ сделать это.

Ответы:



8

Вероятно, есть более эффективные способы сделать это. С этим предостережением:

awk '{$35 = $35"$"; print}' infile > outfile

3

Если разделитель поля <space>:

sed 's/  */$&/35'

Если разделитель поля неизвестен:sed 's/./$&/35'
Underverse

@ Unververse - я не думаю, что это одно и то же. Это должно предшествовать 35-му символу в строке ввода с символами, $разделенными или нет. Вышеприведенная вещь должна прикрепить 35-е вхождение любого числа символов-разделителей - иными словами, 35-е поле - с символом $- независимо от того, как символы в каждом поле.
mikeserv

Ах, «40 колонок в записи». Я прочитал «35-й столбец» как буквально «35-й символьный столбец текстового файла».
Обратный

3

Чтобы зарезервировать оригинальный Field-Seprator, я сделал это. Колонка, которую я хотел исключить, была номер 12 долларов.

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

С помощью gawk -i, если у вас есть, вы можете редактировать файл на месте.


1

Если бы возникли проблемы с использованием «одобренных» ответов, он заменил бы не только первый столбец в файле. Я использую эту общую команду:

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

Где:

  • [column] = столбец, который вы хотите изменить, начиная с 1 (не 0)
  • [replace] = текст, который вы хотите заменить

awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ... заменил миллион меток за несколько секунд !! :)
roblogic
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.