как объединить различные файлы, которые имеют тот же заголовок, но немного отличающееся имя файла?

На ноутбуках Вы, возможно, должны были бы нажать CtrlFnF1 для открытия терминала, что я делаю ввести reboot now перезапускать от терминала.

Для возвращения к GUI от терминала на моем ноутбуке (HP G56), я имею к CtrlFnF8 (по-видимому, это мог также быть CtrlFnF7), и необходимо вернуться к графическому интерфейсу.

Также проверьте http://community.linuxmint.com/tutorial/view/244

Остановка и Запуск

  • shutdown -h now – Завершите работу системы теперь и не перезагружайте
  • halt – Остановите все процессы - то же как выше
  • shutdown -r 5 – Завершите работу системы за 5 минут и перезагрузку
  • shutdown -r now – Завершите работу системы теперь и перезагрузки
  • reboot – Остановите все процессы и затем перезагрузку - то же как выше
  • startx – Запустите X систем

1
21.08.2013, 23:27
5 ответов

Я думаю, что Вы просите что данный файлы:

fluxes_2000_10_10   fluxes_2001_10_10    fluxes_2003_10_10

и

fluxes_2000_20_10   fluxes_2001_20_10    fluxes_2003_20_10

Вы создаете "общий" файл для каждого из вышеупомянутых файлов в широте 10_10 и затем 20_10 и т.д.

В этом случае:

bash$ for lat in $(ls -1 fluxes_* | sed 's/fluxes_[0-9]*_\([0-9]*_[0-9]*\)/\1/' |sort|uniq )
do 
    echo "processing $lat ..." 
    cat fluxes_[0-9]*_${lat} > fluxes_TOT_${lat} 
done 

ls -1 fluxes_* | sed 's/fluxes_[0-9]*_\([0-9]*_[0-9]*\)/\1/' | sort | uniq находит все уникальные широты (x_y) парами числа, мы затем ступаем через них с a for цикл и cat содержание файлов в той широте (все годы) и выводы их к fluxes_TOT_x_y.

1
27.01.2020, 23:29
  • 1
    Drav!! Ваш сценарий работал отлично, что я хотел сделать. –  AiB 21.08.2013, 22:46
  • 2
    Ваш сценарий почти работает моя работа, но это читает все файлы и папки в папке, я продолжаю работать. Можно ли позволить сценарию, действительно читают и объединяются только fluxes_YYYY_lat_long? Спасибо за помощь А-ч –  AiB 21.08.2013, 23:30
  • 3
    да это будет, изменить его на: $(ls -1 fluxes_* | sed 's/fluxes_[0-9]*_\([0-9]*_[0-9]*\)/\1/' |sort|uniq ) - Я отредактирую ответ соответственно положительная сторона –  Drav Sloan 21.08.2013, 23:31
  • 4
    Большой, но я думаю, что, возможно, вызвал беспорядок, у Вас есть способность на сайте для принятия ответа (нажимающий галочку моим ответом), детали находятся на meta: meta.stackoverflow.com/help/someone-answers –  Drav Sloan 22.08.2013, 12:19
  • 5
    Дорогой Drav Sloan, я встретился с проблемой, когда я выполняю код. Это работало ранее, теперь это не. Это должно обработать lat не целое имя файла кошке для определенного lat_long. Вот файл журнала. обработка fluxes_2007_-65_-147... кошка: потоки _ [0-9] *fluxes_2007-65_-147: Никакой такой файл или каталог, обрабатывающий fluxes_2008_-65_-147... кошка: потоки _ [0-9] *fluxes_2008-65_-147: Никакой такой файл или каталог. нет никакого выходного результата. Поиск Вашего ответа. Спасибо –  AiB 25.08.2013, 11:15

Я использовал бы sort -u fluxes_*_lat_long> fluxes_lat_long', это - безусловно простое решение.

Править: используйте в сценарии

for file in $(ls -1 fluxes_20*_*_*) ; do
    export ll="$(echo $file |cut -d _ -f 3,4)"  # extract lat & long
    echo "sort -u fluxes_*_$ll"  "> fluxes_$ll" # create sort instruction
done | uniq | sh
1
27.01.2020, 23:29
  • 1
    Daniel W. Crompton, сообщите мне целый сценарий, который мог сделать мою задачу? Спасибо –  AiB 25.08.2013, 10:16
  • 2
    @Abraham, которая помогает. –  Daniël W. Crompton 25.08.2013, 12:39
  • 3
    Daniel, Большое спасибо. Я прекрасен. спасибо –  AiB 25.08.2013, 14:22

Если я понял Ваши требования, Вы хотите объединить все данные потока для одной точки в fluxes_lat_long с форматом

01 01 Fluxes total_fluxes_for_Jan_1_over_30_years
01 02 Fluxes total_fluxes_for_Jan_2_over_30_years
...

Если это так, вот сценарий Perl, который должен помочь:

#!/usr/bin/perl

use strict;
use warnings;

my @files = glob 'fluxes_*_*_*';
my %points;
$files[$_] =~ /_([0-9]+_[0-9]+)\Z/ and $points{$1}++ for (0..$#files);

for my $point (sort keys %points){
    my @point_files = grep { /_$point\Z/ } @files;
    my %days;
    for my $file (@point_files){
        open my $f,'<',$file or die "Failed to open file $file : $!\n";
        <$f>; #Discard the header
        while(<$f>){
            my ($year,$month,$day,$number) = split;
            $days{"$month $day"}+=$number;
         }
         close $f;
     }

     open my $of,'>',"fluxes_$point";
     for (sort by_date keys %days){
         print $of "$_ Fluxes $days{$_}\n";
     }
 }

 sub by_date{
    my ($month_a,$day_a) = split /\s*/,$a;
    my ($month_b,$day_b) = split /\s*/,$b;
    my $month_sort = $month_a <=> $month_b;
    my $day_sort = $day_a <=> $day_b;
    return $month_sort ? $month_sort : $day_sort
}
1
27.01.2020, 23:29
  • 1
    Спасибо Joseph. Вы понимаете мой вопрос. На самом деле сценарий Daniel сделал то, что я хотел. когда я попробовал Ваш документ на получение, у меня есть следующий ошибочный массаж. –  AiB 25.08.2013, 19:19
  • 2
    "мои" переменные маски $month_a более раннее объявление в том же объеме в./abraham.pl строке 32. "мои" переменные маски $month_b более раннее объявление в том же объеме в./abraham.pl строке 32. "мои" переменные маски $day_a более раннее объявление в том же объеме в./abraham.pl строке 33. "мои" переменные маски $day_b более раннее объявление в том же объеме в./abraham.pl строке 33. "мои" переменные маски $month_sort более раннее объявление в том же объеме в./abraham.pl строке 34. "мои" переменные маски $month_sort более раннее объявление в том же объеме в./abraham.pl строке 35. синтаксическая ошибка в./abraham.pl строке 24, рядом "&by_date ключи" –  AiB 25.08.2013, 19:20
  • 3
    Недопустимый символ разделителя '$' в списке атрибутов в./abraham.pl строке 35, около "$month_sort: возвратите" Выполнение./abraham.pl, прерванного из-за ошибок компиляции. –  AiB 25.08.2013, 19:23
  • 4
    @Abraham Все зафиксированные. –  Joseph R. 25.08.2013, 19:48
  • 5
    Спасибо за Вашу справку. Кажется, что вся ошибка фиксируется. Но я не мог быть произведен при запущении скрипта. Файл журнала пуст. Спасибо –  AiB 25.08.2013, 21:28

Если Вы хотите конкатенировать, можно сделать это легко:

cat fluxes_2001_50_70 >> fluxes_2000_50_70

Но Вы делаете это, когда Ваши файлы не увеличивают свой volumne.

Однако Ваш вопрос находится позади набора другого вопроса, такого как:

"второй файл должен быть обновлением после слияния?"

0
27.01.2020, 23:29

tail -qn +2 удалит заголовки и начнет со второй строки для каждого файла, fluxes_* будет шарик все файлы, который запускается с той строки, и > fluxes_2000_2030 передаст все данные по каналу к единственному выходному файлу:

tail -qn +2 fluxes_* > fluxes_2000_2030
0
27.01.2020, 23:29

Теги

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