Як замінити вміст певної колонки на awk?


31

Дано: у записі є 40 стовпців. Я хочу замінити 35-й стовпчик так, щоб 35-й стовпець був замінений змістом 35-го стовпця та символом "$". Що прийшло в голову, це щось на зразок:

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

Це працює, але тому, що це нездійсненно, коли кількість стовпців дорівнює 10k. Мені потрібен кращий спосіб зробити це.

Відповіді:



8

Напевно, є більш ефективні способи зробити це. З цим застереженням:

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

3

Якщо роздільник поля <space>:

sed 's/  */$&/35'

Якщо роздільник поля невідомий:sed 's/./$&/35'
Підрядник

@ Underverse - Я не думаю, що це те саме. Це повинно мати префікс 35-го знака у рядку введення w / char $- обмежено чи ні. Наведене вище має прикріплювати 35-е виникнення будь-якої кількості знаків розмежувача - інакше кажучи, 35-го поля - зі знаком $- незалежно від того, наскільки символи знаходяться в кожному полі.
mikeserv

Ах, "40 стовпців у записі". Я читаю "35-й стовпчик" як буквально "стовпець 35-го символьного тексту".
Underverse

3

Щоб зарезервувати оригінальний Field-Sector, я зробив це. Стовпчик, який я хотів залишити, був номер 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.