Добавить новый столбец в файл

Как я могу добавить новый столбец в файл с кодами awk?

исходный файл

F1 F2 F3 ..F10 

добавить F11 в исходный файл

F1 F2 F3 ..F10 F11

person user951487    schedule 26.09.2011    source источник
comment
Откуда F11? Вычисляется ли он из F1..F10 или хранится в другом файле?   -  person mouviciel    schedule 26.09.2011
comment
как он хранится в другом файле? каждое поле в строке? или тоже поле из CSV или что-то в этом роде? Есть ли какая-либо связь между двумя файлами? лучше дайте нам примеры, оригинальный.файл, другой.файл и ожидаемый результат.   -  person Kent    schedule 26.09.2011
comment
Возможный дубликат: stackoverflow.com/q/1636755/45249. Мой ответ заключается в использовании paste вместо awk, но и другие ответы также могут быть полезны.   -  person mouviciel    schedule 26.09.2011


Ответы (3)


пытаться:

awk 'BEGIN{getline to_add < "f3"}{print $0,to_add}' f

Читает добавляемый столбец из файла "f3" и сохраняет его в переменной to_add. После этого он добавляет столбец к каждой строке файла f.

HTH Крис

person Chris    schedule 26.09.2011
comment
Это добавляет первую строку f3 в каждый столбец для меня. Должно ли это быть awk '{getline to_add ‹ f3; вместо этого напечатать $0,to_add}' f? - person Ian Hinder; 09.05.2016

Если вы хотите добавить столбец в файл, вы можете сделать следующее.

примечание. Мы предполагаем, что разделитель полей FS равен строке "fs". Вы можете заменить это чем угодно, или, если вы просто используете ‹пробелы› в качестве разделителя полей, вы можете удалить часть BEGIN{FS=OFS="fs"} в любом из следующих решений.

добавьте столбец в начало:

awk 'BEGIN{FS=OFS="fs"}{print value OFS $0}' file

добавьте столбец в конце:

awk 'BEGIN{FS=OFS="fs"}{print $0 OFS value}' file

добавить столбец перед столбцом n:

awk 'BEGIN{FS=OFS="fs"}{$n = value OFS $n}1' file

добавить столбец после столбца n:

awk 'BEGIN{FS=OFS="fs"}{$n = $n OFS value}1' file

добавьте столбец перед каждым из столбцов n1n2 ‹ ... ‹ nm: (начинайте сзади)

awk 'BEGIN{FS=OFS="fs"; split("n1,n2,n3,...,nm",a,",")}
     {for(i=m;i>0;--i) $(a[i]) = value OFS $(a[i])}1' file

или для разных значений

awk 'BEGIN{FS=OFS="fs"; split("n1,n2,n3,...,nm",a,","); split("value1,value2,...,valuem",v,",")}
     {for(i=m;i>0;--i) $(a[i]) = v[i] OFS $(a[i])}1' file

добавьте столбец после каждого столбца n1n2 ‹ ... ‹ nm: (начинайте сзади)

awk 'BEGIN{FS=OFS="fs"; split("n1,n2,n3,...,nm",a,",")}
     {for(i=m;i>0;--i) $(a[i]) = $(a[i]) OFS value}1' file

или для разных значений

awk 'BEGIN{FS=OFS="fs"; split("n1,n2,n3,...,nm",a,","); split("value1,value2,...,valuem",v,",")}
     {for(i=m;i>0;--i) $(a[i]) = $(a[i]) OFS v[i]}1' file
person kvantour    schedule 12.10.2018
comment
О, круто. очень полезно. Просто интересно, откуда 1 в «добавить столбец после/перед столбцом n» и в чем смысл? - person applequist; 10.01.2019
comment
@applequist 1 — это условие по умолчанию, которое выполняет действие по умолчанию — print $0. См. unix.stackexchange.com/q/63891/273492. - person kvantour; 10.01.2019

person    schedule
comment
Или даже awk '$0=$0"F11"' original.file - person fedorqui 'SO stop harming'; 27.09.2013
comment
awk -v OFS=x '{print $0, "F11"}' если вы хотите изменить разделитель полей вывода (x) - person Neil McGuigan; 01.08.2016