как я могу сделать эти данные в отдельных столбцах

Вот так

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
0
25.09.2020, 18:15
2 ответа

Использование 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-[+] _(редукция _метаоператоры)

0
18.03.2021, 23:02

Используя 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.

0
18.03.2021, 23:02

Теги

Похожие вопросы