Я хотел бы разделить файл на разные файлы на основе информации в столбцах заголовка. Например:
Входные данные: 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? . Спасибо.