На ноутбуках Вы, возможно, должны были бы нажать 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 системЯ думаю, что Вы просите что данный файлы:
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
.
Я использовал бы 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
Если я понял Ваши требования, Вы хотите объединить все данные потока для одной точки в 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
}
Если Вы хотите конкатенировать, можно сделать это легко:
cat fluxes_2001_50_70 >> fluxes_2000_50_70
Но Вы делаете это, когда Ваши файлы не увеличивают свой volumne.
Однако Ваш вопрос находится позади набора другого вопроса, такого как:
"второй файл должен быть обновлением после слияния?"
tail -qn +2
удалит заголовки и начнет со второй строки для каждого файла, fluxes_*
будет шарик все файлы, который запускается с той строки, и > fluxes_2000_2030
передаст все данные по каналу к единственному выходному файлу:
tail -qn +2 fluxes_* > fluxes_2000_2030
$(ls -1 fluxes_* | sed 's/fluxes_[0-9]*_\([0-9]*_[0-9]*\)/\1/' |sort|uniq )
- Я отредактирую ответ соответственно положительная сторона – Drav Sloan 21.08.2013, 23:31