The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
Overføre data fra en fil til en annen inquisitive101 UNIX for Dummies Spørsmål og svar 1 01-05-2009 03:42
FTP - dataoverføringsforespørsel begrensninger. system-admin AIX 2 12-20-2006 03:11
Dataoverføringsforespørsel programmer i IPC Mekanismer? boris35 UNIX for Dummies Spørsmål og svar 2 05-26-2005 01:12
dataødeleggelse med ftp overføring malcom UNIX for Advanced & ekspertbrukere 12 08-04-2003 08:38
Hvor mye data vil overføre til 100 full 98_1LE UNIX for Dummies Spørsmål og svar 3 10-05-2001 10:48

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 01-05-2009
inquisitive101 inquisitive101 is offline
Registrert bruker
  
 

Bli Date: Jan 2009
Innlegg: 5
Overføre data fra en fil til en annen

Hei,
Jeg er relativt ny på shell scripting, jobbet Ive på noen grunnleggende prosedyrer og brukte det meste av unix kommandoer i de enkleste situasjoner. Men jeg er nå stilt overfor en oppgave som synes å være utenfor meg.

Jeg har en fil med data i form av rader og kolonner:

123 4536 abcd4 677 BBB ggg nnn 32425
343 5656 abcd6 566 eee fff ooo 56454
343 5645 abcd7 556 ddd lll jjj 43536 ....
.
.
.
og så videre

Jeg trenger et shell-script for å hente disse dataene og sette det inn i et innstikk kommando som ligger i en annen tekst file.The sette kommando vil være i form setter inn table_xyz verdier ($ a, '$ b', '$ c', osv. ) der variablene ville bli verdiene fra de nevnte datafilen. utgangen av skriptet skal være så mange setter utsagn som det er linjer i dataene file.As i,
setter inn table_xyz verdier (123, 4536, 'abcd4', 677, 'BBB', 'ggg', 'nnn ", 32425)
setter inn table_xyz verdier (343, 5656, 'abcd6', 566, 'Eee', 'fff', 'ooo' 56454) osv.

Noen form for skript til å lagre data i en matrise eller noe og iterate gjennom det? Enhver hjelp, vil rådet bli verdsatt ...

Enn på forhånd
  #2 (permalink)  
Old 01-05-2009
summer_cherry summer_cherry is offline Forum Advisor  
Registrert bruker
  
 

Bli Dato: juni 2007
Sted: Beijing Kina
Innlegg: 1098
hei nedenfor perl Skriptet kan hjelpe deg litt
Ikke sikker på om kolonnen i fast lengde, hvis ja, kan fjerne disse trimme (og), og antall <angir lengden av verdien din, må du så sikker bruk lengste <for dem alle avhengig av din lengste kolonneverdi .



Code:
format TOP=
insert into table_xyz values(@<<<<<,@<<<<<,trim('@<<<<<<'),@<<<<<,trim('@<<<<<'),trim('@<<<<<'),trim('@<<<<<<'),@<<<<<<);
$a $b $c $d $e $f $g $h
.
$~=TOP;
open FH,"<a.txt";
while(<FH>){
	($a, $b, $c, $d, $e, $f, $g, $h)=split(" ",$_);
	write;
}
close FH;

  #3 (permalink)  
Old 01-05-2009
pludi's Avatar
pludi pludi is offline Forum Staff  
Moderator
  
 

Bli Dato: desember 2008
Sted:. Ved
Innlegg: 1969
Dette Perl script kan hjelpe deg. Det tar 2 argumenter:
  1. Seperator brukt (i ditt eksempel '')
  2. Tabell for innsetting (i ditt eksempel 'table_xyz')
Selve dataene leses fra standard inngang, er INSERT uttalelser skrive til standard ut.

Code:
#!/usr/bin/perl -W

use strict;
use warnings;

my $sep   = $ARGV[0];
my $table = $ARGV[1];
while ( my $line = <STDIN> ) {
    print "INSERT INTO $table VALUES(";
    my @line = split /$sep/, $line;
    for ( my $i = 0 ; $i < $#line ; $i++ ) {
        $_ = $line[$i];
        if (/\D/) {
            print '"', $_, '"';
        }
        else {
            print $_;
        }
        print ',' if $i < $#line - 1;
    }
    print ");\n";
}

Ditt eksempel kan gi
Code:
$ perl csv2sql.pl ' ' table_xyz < example.txt
INSERT INTO table_xyz VALUES(123,4536,"abcd4",677,"bbb","ggg","nnn");
INSERT INTO table_xyz VALUES(343,5656,"abcd6",566,"eee","fff","ooo");
INSERT INTO table_xyz VALUES(343,5645,"abcd7",556,"ddd","lll","jjj");
$

  #4 (permalink)  
Old 01-05-2009
Christoph Spohr Christoph Spohr is offline
Registrert bruker
  
 

Bli Dato: Sep 2008
Innlegg: 205
Eller så enkelt shell script:


Code:
while read a b c d e f g h 
do 
    echo "insert into table_xyz values($a, $b, '${c}', $d, '${e}', '${f}', '${g}', $h)"
done < datafile

HTH Chris
  #5 (permalink)  
Old 01-05-2009
inquisitive101 inquisitive101 is offline
Registrert bruker
  
 

Bli Date: Jan 2009
Innlegg: 5
Thanx guys .....

vil prøve dem ut ... i hvert fall nå vet jeg i hvilken retning jeg må flytte
  #6 (permalink)  
Old 01-07-2009
inquisitive101 inquisitive101 is offline
Registrert bruker
  
 

Bli Date: Jan 2009
Innlegg: 5
Ok nå hvor om hvis jeg har et nytt scenario der min. CSV-fil ser slik ut:

a, b, c, d
a, b, c, d
a, b, c, d
e, b, c, d
e, b, c, d
e, b, c, d


Min utgang burde b 3 sette inn forespørsler, som er bare litt annerledes. ie:

setter inn table_xyz verdier (123, $ a, 'abcd4', 601, $ b, $ c, $ d, 32425)
setter inn table_xyz verdier (124, $ a, 'abcd4', 602, $ b, $ c, $ d, 32425)
setter inn table_xyz verdier (125, $ a, 'abcd4', 603, $ b, $ c, $ d, 32425)
setter inn table_xyz verdier (126, $ e, 'abcd4', 601, $ b, $ c, $ d, 32425)
setter inn table_xyz verdier (127, $ e, 'abcd4', 602, $ b, $ c, $ d, 32425)
setter inn table_xyz verdier (128, $ e, 'abcd4', 603, $ b, $ c, $ d, 32425)

problemet er måten det 2. og 4. felt i spørringen skulle b trykt. mens 2. feltet skal b gjentas 3 ganger (som i lese hver linje av datafilen), 4. feltet intervaller til 3 og går tilbake etter hvert 3.linje av filen ...

noen forslag ...? trenger et shell script ...

Jeg prøvde å endre shell script gitt av Christoph men produksjonen er slik at de samme 3 søk blir gjentatt så mange ganger som det linjer i mitt datafil før du går videre ...
Closed Thread

Hugseliste

Tags
awk, awk trim, trim, trim awk

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 06:01.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0