Разделить CSV-файл на несколько CSV-файлов на основе столбцов заголовков, используя awk - PullRequest
0 голосов
/ 02 августа 2020

Я хотел бы разделить файл на разные файлы на основе информации в столбцах заголовка. Например:

Входные данные: file.csv

ID A A A A A A A A A B B B B B B B B B C C C C C C D D D D D D
01 0 2 2 0 2 0 2 0 3 2 0 2 2 0 0 2 1 2 2 2 0 1 1 1 2 0 2 0 0 0
02 0 3 1 0 1 0 1 1 4 1 0 2 2 0 0 2 2 0 2 2 0 0 0 0 2 0 2 0 0 1
03 0 2 1 0 1 0 1 1 2 1 0 2 2 0 0 2 0 1 2 2 0 0 0 0 2 0 2 0 0 1 

Желаемый результат:

-->output_A.csv
ID A A A A A A A A A
01 0 2 2 0 2 0 2 0 3
02 0 3 1 0 1 0 1 1 4
03 0 2 1 0 1 0 1 1 2

-->output_B.csv
ID B B B B B B B B B
01 2 0 2 2 0 0 2 1 2
02 1 0 2 2 0 0 2 2 0
03 1 0 2 2 0 0 2 0 1

-->ouput_C.csv
ID C C C C C C C C C
01 2 2 0 1 1 1
02 2 2 0 0 0 0
03 2 2 0 0 0 0

-->output_D.csv
ID D D D D D D D D D
01 2 0 2 0 0 0
02 2 0 2 0 0 1
03 2 0 2 0 0 1

Обратите внимание, что только первый столбец (ID) идентичен для всех файлов. Значения для отсутствующих столбцов пусты. Я попытался с помощью следующей команды awk описать здесь by @ user79743:

awk '{ for (i=1; i<=NF;i++){
          if (NR==1) { file[i]=$i }
          if (NR!=1) { f="output" file[i]   ".txt";
                       g="output" file[i+1] ".txt";
                       printf("%s%s",$i,f==g?OFS:ORS)>>f;
                       close(f);
                      }
          }
      }' file.csv 

, но это не дало мне правильного результата. Как это сделать в awk? . Спасибо.

...