Распечатать каждый альтернативный столбец в строке в текстовом файле - PullRequest
0 голосов
/ 30 октября 2018

У меня есть файл, разделенный запятыми. Я хотел бы распечатать все альтернативные столбцы в новую строку.

Пример входного файла:

Name : John, Age : 30, DOB : 30-Oct-2018

Пример вывода:

Name,Age,DOB  
John,30,30-Oct-2018

Ответы [ 4 ]

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

Вот общая идея, которую вы можете использовать для реализации решения.

Использование функции split в awk.

  1. Разбейте всю строку на массив rows с разделителем строк (", ") и сохраните количество строк.
  2. Разделите каждую строку в массив cols с разделителем столбцов (" : ") и сохраните количество столбцов. Итерируйте значения столбцов и сохраняйте их в таблицу, индексируемую по строкам и столбцам, например, data[row","col].
  3. Наконец, итерируйте сначала число столбцов, а затем количество строк, печатая data[row","col].
0 голосов
/ 30 октября 2018

За Ваш пример и вывод:

$ awk -F', ' '/ : / { for (i=1;i<=NF;i++) { if ( match($i,/ : /) ) { linekeys=linekeys substr($i,1,RSTART-1) ","; linevalues=linevalues substr($i,RSTART+RLENGTH) ","; } } print(substr(linekeys,1,length(linekeys)-1)); print(substr(linevalues,1,length(linevalues)-1)); linekeys=""; linevalues=""; }' file.txt
Name,Age,DOB
John,30,30-Oct-2018
0 голосов
/ 30 октября 2018

non- awk решение

$ sed 's/[,:]/\n/g;s/ //g' file | pr -3ts,

Name,Age,DOB
John,30,30-Oct-2018
0 голосов
/ 30 октября 2018
 awk 'BEGIN{FS="[[:blank:]]*[:,][[:blank:]]*"}
      { for(i=1;i<=NF;i+=2) printf (i==1?"":",") $i; print "" }
      { for(i=2;i<=NF;i+=2) printf (i==1?"":",") $i; print "" }' inputfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...