Intereting Posts
Установите последнюю версию пакета, для которого не требуется обновление зависимостей Консоль отсоединения / уничтожения xm на сервере узла Удалить значения дубликатов в поле Как дублировать мой установочный раздел на раздел btrfs? Как я могу извлечь / проанализировать полный URL-адрес из полуслучайной строки? VPN с iptables и маршрутизацией: порт доступа из локальной сети Как настроить Linux для кэширования метаданных файлов в соответствии с содержанием? Менеджер окон с поддержкой / расширением python Неотслеживаемая проблема стабильности ядра 3.6.8 на ASUS P53E Можно ли перечислить все процессы, связанные с конкретным ip и портом? Как я могу сделать psf-шрифт для консоли из otf? Перенос ключей Caps Lock и Windows для отдельных модификаторов Grep для нескольких строк, покажите количество строк после одной из строк (но не другой) Не удается загрузить slackware после установки. Liloconfig не найден Свернуть линию вертикально, чтобы каждое слово находилось на новой строке

Как добавить текст из одной строки в конец другого?

Исходный выходной файл содержал этот блок текста среди гораздо более подробной информации:

Projecting out rotations and translations Force Constants (Second Derivatives of the Energy) in [au] GX1 GY1 GZ1 GX2 GY2 GX1 0.6941232 GY1 0.0187624 0.0156533 GZ1 -0.1175495 -0.0980708 0.6144300 GX2 -0.6074291 -0.0036667 0.0229726 0.6228918 GY2 0.0069881 -0.0013581 0.0085087 0.0023190 0.0014047 GZ2 -0.0437815 0.0085087 -0.0533084 -0.0145287 -0.0088007 GX3 -0.0866941 -0.0150957 0.0945769 -0.0154627 -0.0093070 GY3 -0.0257505 -0.0142952 0.0895621 0.0013477 -0.0000466 GZ3 0.1613309 0.0895621 -0.5611216 -0.0084438 0.0002920 GZ2 GX3 GY3 GZ3 GZ2 0.0551377 GX3 0.0583102 0.1021568 GY3 0.0002920 0.0244027 0.0143418 GZ3 -0.0018293 -0.1528871 -0.0898540 0.5629509 

До сих пор мне удалось выделить нужные мне данные вместе с соответствующими заголовками и распечатать их в файле журнала с помощью [grep] и [awk] (ниже):

 #!/bin/bash rm Hessian.log for i in *.out do grep -H -A16 "Force Constants (Second Derivatives of the Energy)" $i | tail -n +1 | awk ' NR == 2 {printf " "" %10s %10s %10s %10s %10s \n", $2,$3,$4,$5,$6} NR == 3, NR == 11 {printf "%5s %10s %10s %10s %10s %10s\n", $2,$3,$4,$5,$6,$7} ' >> Hessian.log echo "" >> Hessian.log done 

Что производит:

  GX1 GY1 GZ1 GX2 GY2 GX1 0.6941232 GY1 0.0187624 0.0156533 GZ1 -0.1175495 -0.0980708 0.6144300 GX2 -0.6074291 -0.0036667 0.0229726 0.6228918 GY2 0.0069881 -0.0013581 0.0085087 0.0023190 0.0014047 GZ2 -0.0437815 0.0085087 -0.0533084 -0.0145287 -0.0088007 GX3 -0.0866941 -0.0150957 0.0945769 -0.0154627 -0.0093070 GY3 -0.0257505 -0.0142952 0.0895621 0.0013477 -0.0000466 GZ3 0.1613309 0.0895621 -0.5611216 -0.0084438 0.0002920 GZ2 GX3 GY3 GZ3 GZ2 0.0551377 GX3 0.0583102 0.1021568 GY3 0.0002920 0.0244027 0.0143418 GZ3 -0.0018293 -0.1528871 -0.0898540 0.5629509 

Тем не менее, я пытаюсь переместить последние четыре строки так, чтобы они сидели в столбцах рядом с данными выше, с их соответствующими заголовками (GZ2, GX3, GY3, GZ3) в той же строке, что и другие заголовки. Проще говоря, результирующий результат должен быть 9 * 9 матрицей данных с метками для каждого столбца и строки (как показано ниже).

  GX1 GY1 GZ1 GX2 GY2 GZ2 GX3 GY3 GZ3 GX1 0.6941232 GY1 0.0187624 0.0156533 GZ1 -0.1175495 -0.0980708 0.6144300 GX2 -0.6074291 -0.0036667 0.0229726 0.6228918 GY2 0.0069881 -0.0013581 0.0085087 0.0023190 0.001404 GZ2 -0.0437815 0.0085087 -0.0533084 -0.0145287 -0.0088007 0.0551377 GX3 -0.0866941 -0.0150957 0.0945769 -0.0154627 -0.0093070 0.0583102 0.1021568 GY3 -0.0257505 -0.0142952 0.0895621 0.0013477 -0.0000466 0.0002920 0.0244027 0.0143418 GZ3 0.1613309 0.0895621 -0.5611216 -0.0084438 0.0002920 -0.0018293 -0.1528871 -0.0898540 0.5629509 

Простой скрипт Perl прекрасно выполнит трюк (Perl уже установлен на dang почти все):

 #!/usr/bin/env perl my @rows; # Preserve order of appearance my %rows; my $heading; for (<>) { chomp; if (s/^\s+/ /) { $heading .= $_; } elsif (/^(\w+) (.*)$/) { push @rows, $1 if not exists $rows{$1}; $rows{$1} .= $2; } else { die "Invalid line format at line $."; } } my $fmt = "%-5s %s\n"; # Adjust width to suit taste printf $fmt, '', $heading; printf $fmt, $_, $rows{$_} for @rows; 

Просто вызовите эту программу с вашими данными примерно так:

 $ my_column.pl < your_data.txt 

(Предположим, что вы сохранили этот скрипт как my_column.pl и сделали его исполняемым с помощью chmod 755 my_column.pl конечно!)

Вышеизложенное должно выполнить эту работу, но если вам нужно точное выравнивание столбцов или более продвинутое форматирование в целом, вы можете split столбцы и заставить конкретные ширины столбцов с помощью printf или один из многих модулей табличного форматирования, доступных для Perl.

Удалось решить мою собственную проблему, просто назначив конкретную строку и столбец как переменную и объединив их с помощью эха, просто, когда вы знаете ответ!

 #!/bin/bash cd FREQ/HF rm Hessian.log for i in *.out do grep -H -A16 "Force Constants (Second Derivatives of the Energy)" $i | tail -n +1 >> Hessian.tmp x=`awk ' NR == 2 {printf " "" %10s %10s %10s %10s %10s \n", $2,$3,$4,$5,$6}' Hessian.tmp` y=`awk ' NR == 12 {printf "%10s %10s %10s %10s \n", $2,$3,$4,$5}' Hessian.tmp` a=`awk ' NR == 8 { printf "%5s %10s %10s %10s %10s %10s\n", $2,$3,$4,$5,$6,$7} ' Hessian.tmp` b=`awk ' NR == 9 { printf "%5s %10s %10s %10s %10s %10s\n", $2,$3,$4,$5,$6,$7} ' Hessian.tmp` c=`awk ' NR == 10 { printf "%5s %10s %10s %10s %10s %10s\n", $2,$3,$4,$5,$6,$7} ' Hessian.tmp` d=`awk ' NR == 11 { printf "%5s %10s %10s %10s %10s %10s\n", $2, $3,$4,$5,$6,$7} ' Hessian.tmp` e=`awk ' NR == 13 { printf "%10s", $3} ' Hessian.tmp` f=`awk ' NR == 14 { printf "%10s %10s", $3, $4} ' Hessian.tmp` g=`awk ' NR == 15 { printf "%10s %10s %10s", $3, $4,$5} ' Hessian.tmp` h=`awk ' NR == 16 { printf "%10s %10s %10s %10s", $3, $4, $5,$6} ' Hessian.tmp` echo "$x $y" >> Hessian.log awk ' NR == 3, NR == 7 {printf "%5s %10s %10s %10s %10s %10s\n", $2,$3,$4,$5,$6,$7} ' Hessian.tmp >> Hessian.log echo "$a $e" >> Hessian.log echo "$b $f" >> Hessian.log echo "$c $g" >> Hessian.log echo "$d $h" >> Hessian.log rm Hessian.tmp echo "" >> Hessian.log done