Я пытаюсь использовать unix для преобразования файла с разделителями табуляции из формата короткого/широкого формата в длинный, аналогично функции reshape в R. Надеюсь создать три строки для каждого строка в стартовом файле. В столбце 4 в настоящее время содержится 3 значения, разделенные запятыми. Я надеюсь, что колонки 1, 2 и 3 будут одинаковыми для каждой стартовой строки, но столбец 4 будет одним из значений из начального столбца 4. Этот пример, вероятно, делает его более понятным, чем я могу описать в устной форме:Переформатирование из широкоформатного формата
current file:
A1 A2 A3 A4,A5,A6
B1 B2 B3 B4,B5,B6
C1 C2 C3 C4,C5,C6
goal:
A1 A2 A3 A4
A1 A2 A3 A5
A1 A2 A3 A6
B1 B2 B3 B4
B1 B2 B3 B5
B1 B2 B3 B6
C1 C2 C3 C4
C1 C2 C3 C5
C1 C2 C3 C6
как кто-то просто Ознакомившись с этим языком, моя первая мысль была использовать СЭД, чтобы найти запятые заменить жесткий возвращения
sed 's/,/&\n/' data.frame
Я действительно не знаю, как включить значения для столбцов 1 -3. У меня были низкие надежды на эту работу, но единственное, что я мог подумать, - попробовать вставить значения столбца с помощью {print $ 1, $ 2, $ 3}.
sed 's/,/&\n{print $1, $2, $3}/' data.frame
Не к моему удивлению, выход выглядел следующим образом:
A1 A2 A3 A4
{print $1, $2, $3} A5
{print $1, $2, $3} A6
B1 B2 B3 B4
{print $1, $2, $3} B5
{print $1, $2, $3} B6
C1 C2 C3 C4
{print $1, $2, $3} C5
{print $1, $2, $3} C6
Похоже, этот подход может быть для хранения значений столбцов 1-3, а затем вставить их. Я не уверен, как хранить значения, я думаю, что это может быть связано с адаптацией следующего сценария, но мне трудно понять все компоненты.
NR==FNR{a[$1, $2, $3]=1}
Заранее спасибо за ваши мысли по этому вопросу.
Большое вам спасибо, это сработало красиво! – user4670961
Зачем использовать подседельную систему sed? Достаточно ли '$ {c1 //, /}'? – ghoti
Отличный пункт @ghoti. Я изменил код. – codeforester