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

В GNU вы можете использовать - numeric-owner , чтобы tar не сохранял ваше имя пользователя. В качестве альтернативы вы можете установить другой идентификатор пользователя с помощью - owner = ID . При извлечении эти идентификаторы пользователей будут удалены, если экстрактор не является пользователем root.

Обычно для объединения файлов используется cpio , который обычно используется с параметром - no-preserve-owner . Так создаются файлы rpm .

Но tar с идентификаторами пользователей редко является проблемой. Если вы хотите быть параноиком, вы используете специальную учетную запись для окончательного связывания.

4
08.12.2016, 04:02
2 ответа

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

#!/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
0
27.01.2020, 21:01

Простой сценарий 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 , конечно!)

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

1
27.01.2020, 21:01

Теги

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