добавить различные новые столбцы в файл CSV, используя awk - PullRequest
0 голосов
/ 11 октября 2018

У меня есть файл CSV.Например, столбцы:

col1, col2, col3, col4, col5

Мне нужно перестроить его как

col1, col2, new_col1, col3, new_col2, col4, new_col3, col5.

Значения в строках будут нулевыми.Я предполагаю, что это должно быть сделано с .

Я пробовал вопросы уже в StackOverflow, но все, что я получаю, это добавить в конце или в начале.Мне нужно иметь возможность указать номер столбца / положение, в котором необходимо добавить имя столбца.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

примечание: В этом ответе предполагается, что в поле CSV нет записистроки ("string") со встроенными - или -характерами .

Если вышеприведенное не относится к вашей проблеме, необходимы другие подходы.Полезные ссылки:


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

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

awk 'BEGIN{FS=OFS=","}{print new_value OFS $0}' file

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

awk 'BEGIN{FS=OFS=","}{print $0 OFS new_value}' file

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

awk 'BEGIN{FS=OFS=","}{$n=new_value OFS $n}1' file

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

awk 'BEGIN{FS=OFS=","}{$n=$n OFS new_value}1' file

добавить столбец перед каждым из столбцов n1 <<code>n2 <... <<code>nm: (начало сзади)

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

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

awk 'BEGIN{FS=OFS=","; 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

добавить столбец после каждого столбца n1 <<code>n2 <... <<code>nm: (начало сзади)

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

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

awk 'BEGIN{FS=OFS=","; 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
0 голосов
/ 11 октября 2018

Хорошо, допустим, ваш CSV выглядит следующим образом:

col1, col2, col3, col4, col5
1, 2, 3, 4, 5

Затем команда:

awk 'BEGIN{FS=OFS=","}{print $1,$2,"new_Col1",$3,"new_Col2",$4,"new_Col5",$5}' t.csv

выдаст следующий вывод:

col1, col2,new_Col1, col3,new_Col2, col4,new_Col5, col5
1, 2,new_Col1, 3,new_Col2, 4,new_Col5, 5

Вы поняли идею?Это то, что вы хотите знать?

Еще проще читать:

awk '{print $1","$2",new_Col1,"$3",new_Col2,"$4",new_Col5,"$5}' t.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...