PDA

Visualizza Versione Completa : aiutino per script bash



epifanio
20-02-07, 23:45
sto provando uno script...

ho 2 file di testo tipo :

file one :

2524464.205 4510655.961 12
2524459.58400078 4510657.39162497 15
2524455.06343952 4510658.51987919 11
2524454.4559001 4510662.2213528 45
2524458.4969279 4510663.26737144 15
2524462.17553609 4510660.29479857 14
2524464.205 4510655.961 18

file two :

# Created by Octave 2.1.73, Tue Feb 20 13:25:09 2007 CET <epifanio@computer-di-epifanio.local>
# name: E_N_2
# type: matrix
# rows: 176139
# columns: 2
504455.753011171 4510648.91403669
504451.132009197 4510650.34461556
504446.61144776 4510651.4728253
504446.003875401 4510655.17428485
504450.044884308 4510656.22033858
504453.723511693 4510653.24780659
504455.753011171 4510648.91403669


voglio creare un nuovo file come questo:

504455.753011171 4510648.91403669 12
504451.132009197 4510650.34461556 15
504446.61144776 4510651.4728253 11
504446.003875401 4510655.17428485 45
504450.044884308 4510656.22033858 15
504453.723511693 4510653.24780659 14
504455.753011171 4510648.91403669 18

i.e:
quello di cui ho bisogno è di prendere la terza colonna del primo file
e aggiungerla al secondo file.....
banale ma non so da dove iniziare
sed....awk ??
per ora ho eliminato il commento con sed...

epifanio
21-02-07, 11:44
usando:
grep -v ^\# file1 > tmp && mv tmp file1

cut -d" " -f3 file1 > tmp
paste -d" " file2 tmp > file.merged

ho ottenuto un file tipo :

504455.753011171 4510648.91403669
504451.132009197 4510650.34461556
504446.61144776 4510651.4728253
504446.003875401 4510655.17428485
504450.044884308 4510656.22033858
504453.723511693 4510653.24780659
504455.753011171 4510648.91403669 12
15
11
45
15
14
18

mi ha copiato la giusta colonna ma me la mette al posto sbagliato..
io la dovrei sistemare al lato delle altre 2, separata da uno "spazio"

idee ???

esempi di "sed" (http://sed.sourceforge.net/sed1line.txt)

Mad
21-02-07, 13:18
ciao epifanio

dovresti fare una scanf dei file

riga 1 a riga 1 e fare il past

conosci qualche linguaggio di programmazione?

hai almeno un compilatore?

epifanio
21-02-07, 13:25
ho solo esperienze di progammazione "base" con:
matlab-octave-R
st a zero di c/c++

per quanto riguarda compilatori
sul mio mac ho installato
gcc 4.0.1
gcc intel
fortran77
li uso per compilare sorgenti di vario genere.

hai qualche consiglio su come procedere?
non dovrebbero bastare i comandi a disposizione della bash?
grazie :-)

epifanio
22-02-07, 00:50
risolto con :

gawk '{if(ARGIND==1){one[i++]=$1" "$2}else if(ARGIND==2 && $0 !~ /^#/){two[j++]=$3}} END{for(i in one)print one[i],two[i]}' file1 file2


equivalente in perl :

#!/usr/bin/perl -w

use strict;
use warnings;

# Define Variables
my $x = 0;
my $y = 0;
my @var;
my $file1 = "filename";
my $file2 = "filename2";
my $mergefile = "merged name";

# Get the numbers we want to tail onto our "file2"
open(TEXT1, "cat $file1\|cut -d \" \" -f3|") or die ($!);
while (<TEXT1>){
chomp;
$x++;
$var[$x] = $_;
}
close(TEXT1);


# Open our merge file and combine file1 & 2
open(MERGE, "> $mergefile") or die ($!);
open(TEXT2, "cat $file2|") or die ($!);
while (<TEXT2>){
chomp;
$y++;
print MERGE "$_" . "$var[$y]\n";
}
close(TEXT1);
close(MERGE);