Вот так
awk '{for(a=2;a<=NF;a++){printf "%s %s%c\n",$1,$a,a==NF ? "" : ";"}}' File.txt >File_2_Columns.txt
Удачи с остальными домашними заданиями;-)
Если учитель дает дополнительные баллы за самый короткий ответ, попробуйте
awk '{for(a=2;a<=NF;){printf"%s%c\n",$1" "$a,a++-NF?";":""}}' File.txt >File_2_Columns.txt
Использование Raku (языка программирования, ранее известного как Perl6)
У Раку есть изящный Z
оператор для таких задач, чтобы «застегивать» элементы, по одному из каждого списка:
~$ raku -e 'my @array1 = lines(); put ( [Z] @array1[0].words, @array1[1].words).join("\n");' Freq_IR.txt
Frequencies IR_Inten
-- --
1403.6738 25.0809
1403.6738 25.0809
1403.6738 25.0809
Примечание. :Мне пришлось исправить строку заголовка выше, чтобы второй столбец назывался «IR_Inten
». Вы можете отредактировать вручную или запустить приведенный ниже код, прежде чем переупорядочивать данные с помощью приведенного выше кода :
~$ raku -pe 's/IR \s Inten/IR_Inten/;' Freq_IR.txt > Freq_IR2.txt
ХТН.
https://raku.org
https://docs.raku.org/language/operators#Zip_metaoperator
https://docs.raku.org/language/operators#index-entry-[+] _(редукция _метаоператоры)
Используя awk, мы можем выполнить преобразование данных.
awk -F ' -- ' '
{
# populate the array
a[++N] = $1; split($2, t, " ")
for (k in t) { a[++N] = t[k] }
}
END {ORS = ""
for (c=i=1; i<=N/NR; i++) {
for (j=i; j<=N; j+=N/NR) {
print a[j] (c++%NR ? "\t" : "\n")
}
}
}
' file
Frequencies IR Inten
1403.6738 25.0809
1403.6738 25.0809
1403.6738 25.0809
Основная идея состоит в том, чтобы сначала заполнить массив, а в конце записать длину массива. Затем разбейте массив на N/NR частей и выберите соответствующие элементы из каждой части. В других языках, таких как Python, эта операция называется zip
.