Добавление столбцов в текстовый файл после последней строки

Меньшая версия многих файлов данных, которые у меня есть, выглядит следующим образом:

0 0 0 0.05 9.6877884e-06 0.0024898597 0.1 4.2838688e-05 0.0049595502 0.15 0.00016929444 0.0074092494 0.2 0.00036426881 0.009839138 0.25 0.00055234582 0.012249394 0.3 0.00077448576 0.014640196 0.35 0.00082546537 0.017011717 0.4 0.0012371619 0.019364133 0.45 0.0013286382 0.02169761 

Я хотел бы получить что-то вроде следующего, где первый столбец повторяется, а записи для второго столбца содержат столбцы 2 и выше из моего исходного файла.

 0 0 0.05 9.6877884e-06 0.1 4.2838688e-05 0.15 0.00016929444 0.2 0.00036426881 0.25 0.00055234582 0.3 0.00077448576 0.35 0.00082546537 0.4 0.0012371619 0.45 0.0013286382 0 0 0.05 0.0024898597 0.1 0.0049595502 0.15 0.0074092494 0.2 0.009839138 0.25 0.012249394 0.3 0.014640196 0.35 0.017011717 0.4 0.019364133 0.45 0.021697611 

Я могу сгенерировать его с помощью awk '{print $1 " " $2}' data > tmp а затем awk '{print $1 " " $3}' data >> tmp но это очень утомительно для количества столбцов, которые у меня есть.

Есть ли более разумный способ добиться того, что мне нужно?

РЕДАКТИРОВАТЬ

Я хотел бы решение для произвольного числа столбцов, n. Правильный порядок столбцов для строк необходим для моих нужд. Таким образом, столбец 3 ввода должен быть «перемещен» под столбцом 2 входа, столбец 4 под 2 и 3 и т. Д., Причем столбец 1 укладывается под многократно. Первый столбец должен быть в порядке возрастания, так как количество строк в каждом столбце равно 0, 0.05, …, 0.45, 0, 0.05, …, 0.45, 0,0.05, …, 0.45 и т. Д.

  • таблица разбиения на основе соответствия ячейки столбцу
  • Печатать текст между тегами (включительно), если обнаружен определенный текст
  • Выполните синтаксический анализ (grepable) nmap для распечатки списка IP \ t с помощью текстовых utils, таких как awk
  • Я пытаюсь получить журналы в течение последних пяти минут через скрипт
  • Организация трехмерных данных с помощью awk / sed / perl
  • Добавление значений
  • awk - как игнорировать подстановочные матчи?
  • Как накапливать данные за предыдущие x дней
  • 3 Solutions collect form web for “Добавление столбцов в текстовый файл после последней строки”

    Awk

    этот awk-скрипт будет работать на произвольном количестве столбцов> 2, и порядок появления будет сохранен так же, как и тогда, без предположений о том, что представляют собой столбцы ( т. е. не имеет значения, являются ли они числовыми или нет, отсортированы или нет, и т.д):

     { for (i = 2; i <= NF; i++) { a[j + i] = $1 " " $i } j += (i - 1); } END { OutNR = NR * NF; for (i = 2; i <= NF; i++) { for (j = 0; j < OutNR; j += NF) { print a[j + i]; } } } 

    Данный:

     0 0 0 0.2340 0.05 9.6877884e-06 0.0024898597 0.2341 0.1 4.2838688e-05 0.0049595502 0.2342 0.15 0.00016929444 0.0074092494 0.2343 0.2 0.00036426881 0.009839138 0.2344 0.25 0.00055234582 0.012249394 0.2345 0.3 0.00077448576 0.014640196 0.2346 0.35 0.00082546537 0.017011717 0.2347 0.4 0.0012371619 0.019364133 0.2348 0.45 0.0013286382 0.02169761 0.2349 

    Закажите по столбцу (2 .. n ), затем по строке:

     0 0 0.05 9.6877884e-06 0.1 4.2838688e-05 0.15 0.00016929444 0.2 0.00036426881 0.25 0.00055234582 0.3 0.00077448576 0.35 0.00082546537 0.4 0.0012371619 0.45 0.0013286382 0 0 0.05 0.0024898597 0.1 0.0049595502 0.15 0.0074092494 0.2 0.009839138 0.25 0.012249394 0.3 0.014640196 0.35 0.017011717 0.4 0.019364133 0.45 0.02169761 0 0.2340 0.05 0.2341 0.1 0.2342 0.15 0.2343 0.2 0.2344 0.25 0.2345 0.3 0.2346 0.35 0.2347 0.4 0.2348 0.45 0.2349 

    р

    Хотя большинство людей не думают о R для обработки текста, в этом случае это на самом деле немного более прямолинейно, хотя вся настройка параметров делает его более сложным, чем есть на самом деле. Суть этого решения состоит в том, чтобы просто rbind() несколько cbind() :

     d.in <- read.table(file = commandArgs(trailingOnly = T)[1] , colClasses = "character"); d.out<-data.frame(); for (i in 2:length(d.in)) { d.out <- rbind(d.out, cbind(d.in[,1], d.in[,i])); } write.table(d.out, row.names = F, col.names = F, quote = F); 

    Тогда просто:

     $ Rscript script.R data.txt 0 0 0.05 9.6877884e-06 0.1 4.2838688e-05 0.15 0.00016929444 0.2 0.00036426881 0.25 0.00055234582 0.3 0.00077448576 0.35 0.00082546537 0.4 0.0012371619 0.45 0.0013286382 0 0 0.05 0.0024898597 0.1 0.0049595502 0.15 0.0074092494 0.2 0.009839138 0.25 0.012249394 0.3 0.014640196 0.35 0.017011717 0.4 0.019364133 0.45 0.02169761 0 0.2340 0.05 0.2341 0.1 0.2342 0.15 0.2343 0.2 0.2344 0.25 0.2345 0.3 0.2346 0.35 0.2347 0.4 0.2348 0.45 0.2349 

    если заказ не имеет значения, вы можете просто использовать это:

     awk '{for(i=2;i<=NF;i++)print $1,$i}' file 

    Вот решение awk :

     $ awk '{a[i++]=$1" "$3;print $1,$2}END{for(i=0;i<length(a);i++){print a[i]}}' file 0 0 0.05 9.6877884e-06 0.1 4.2838688e-05 0.15 0.00016929444 0.2 0.00036426881 0.25 0.00055234582 0.3 0.00077448576 0.35 0.00082546537 0.4 0.0012371619 0.45 0.0013286382 0 0 0.05 0.0024898597 0.1 0.0049595502 0.15 0.0074092494 0.2 0.009839138 0.25 0.012249394 0.3 0.014640196 0.35 0.017011717 0.4 0.019364133 0.45 0.02169761 

    объяснение

    • При обработке файла мы сохраняем $ 1 и $ 3 для массива с индексом от 0 до количества строк с каждой строкой. Затем напечатайте $1 и $2 .

    • В конце мы прокручиваем массив a , печатаем каждый его элемент (который равен $1 $3 ). Порядок сохраняется, потому что мы снова зацикливаем с индексом от 0 до длины массива a .

    обновленный

    Для произвольных столбцов n я использую perl :

     $ perl -anle '$h{$i++} = [@F[0..$#F]]; END { for $j (1..$#F) { for (sort {$a<=>$b} keys %h) { print $h{$_}->[0]," ",$h{$_}->[$j] } } }' file 
    Interesting Posts

    Имя файла устройства CDC заблокировано после отключения модема

    Нужно ли шифровать файл swap *, если он будет находиться в зашифрованном корневом файле?

    Есть ли штраф за производительность при наличии нескольких сегментов для одного тома в LVM?

    Как разбить файл, чередуя префикс, используемый для выходных файлов?

    Как я могу увеличить / увеличить рабочий стол Cinnamon с помощью колеса мыши?

    Как вы добавляете IP-адрес виртуальной сети из командной строки ядра?

    Lubuntu + pulseaudio

    Где KDE 4 хранит свои быстрые клавиши?

    совпадение и добавление на основе позиции символа

    Является ли «кошка» встроенной оболочкой или внешней программой?

    Элементы управления Spotify (следующий, предыдущий и т. Д.) Через контекстное меню в фаворитах gnome

    Как я могу использовать ACL в BIND для пересылки запросов на зону выборочно?

    dot в Vim, последнее изменение?

    Как отображаются загрузочные сообщения Linux перед входом в систему

    Команда, которая удаляет все старые файлы, папки и подпапки

    Linux и Unix - лучшая ОС в мире.