The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Trasferire i dati da un file a un altro inquisitive101 UNIX for Dummies Domande & Risposte 1 01-05-2009 03:42 AM
FTP - Trasferimento dei dati Limitazioni. system-admin AIX 2 12-20-2006 03:11 AM
Trasferimento dei dati in programmi Meccanismi IPC? boris35 UNIX for Dummies Domande & Risposte 2 05-26-2005 12:12 PM
corruzione dei dati, con il trasferimento ftp malcom UNIX e avanzata per utenti esperti 12 08-04-2003 07:38 AM
Quanto trasferimento dati a 100 completo 98_1LE UNIX for Dummies Domande & Risposte 3 10-05-2001 09:48 AM

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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 01-05-2009
inquisitive101 inquisitive101 is offline
Utente Registrato
  
 

Iscriviti Data: gennaio 2009
Interventi: 5
Trasferire i dati da un file a un altro

Salve,
Sono relativamente nuovo di shell scripting, Ive ha lavorato su alcuni script di base e utilizzare la maggior parte dei comandi Unix, nella più semplice delle situazioni. Ma io sono ora di fronte a un compito che sembra essere al di là di me.

Ho un file con alcuni dati in forma di righe e colonne:

123 4536 abcd4 677 bbb ggg nnn 32425
343 5656 abcd6 566 eee fff ooo 56454
343 5645 abcd7 556 ddd lll A CARICO DI JJJ 43536 ....
.
.
.
e così via

Ho bisogno di uno script di shell per raccogliere questi dati e metterla in un inserto di comando che si trova in un altro testo file.The inserire comando sarebbe in forma inserire in table_xyz valori ($ a, '$ b', '$ C', ecc ) dove le variabili sarebbero i valori dal file di dati di cui sopra. l'output dello script dovrebbe essere come molti inserire dichiarazioni in quanto vi sono le linee nei dati file.As in
inserire in table_xyz valori (123, 4536, 'abcd4', 677, 'bbb', 'ggg', 'nnn', 32425)
inserire in table_xyz valori (343, 5656, 'abcd6', 566, 'eee', 'fff', 'ooo' 56454), ecc

Alcune specie di script per memorizzare i dati in un array o qualcosa iterate e attraverso di essa? Qualsiasi aiuto, consiglio sarebbe molto apprezzato ...

Grazie in anticipo
  #2 (permalink)  
Old 01-05-2009
summer_cherry summer_cherry is offline Forum Advisor  
Utente Registrato
  
 

Iscriviti Data: giugno 2007
Ubicazione: Pechino Cina
Messaggi: 1.088
hi sotto perl script può aiutare alcune
Non siete sicuri se il vostro è in colonna a lunghezza fissa, se sì, può rimuovere tali trim (e), e il numero di <indicare la lunghezza del tuo valore, quindi assicuratevi che l'uso più lungo <per tutti i capi a seconda del valore più lunga colonna .


Codice:
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  
Moderatore
  
 

Iscriviti Data: dicembre 2008
Posizione:. A
Interventi: 1.857
Questo Perl script potrebbe aiutarvi. Prende 2 argomenti:
  1. SEPERATOR utilizzati (nel tuo esempio ')
  2. Tabella per l'inserimento (nel tuo esempio 'table_xyz')
I dati si è letto dallo standard input, la INSERT di stampa standard out.
Codice:
#!/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";
}
Il vostro esempio darebbe
Codice:
$ 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
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 205
O come semplice script di shell:

Codice:
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
Utente Registrato
  
 

Iscriviti Data: gennaio 2009
Interventi: 5
Grazie ragazzi .....

Cercherò 'em out ... almeno ora so che ho bisogno di direzione per spostarsi
  #6 (permalink)  
Old 01-07-2009
inquisitive101 inquisitive101 is offline
Utente Registrato
  
 

Iscriviti Data: gennaio 2009
Interventi: 5
Ok ora su come se ho un nuovo scenario in cui i miei file. Csv, è simile a questa:

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


La mia uscita dovrebbe inserire b 3 domande, che sono solo leggermente diverse. vale a dire:

inserire in table_xyz valori (123, $ uno, 'abcd4', 601, $ b, $ c, $ d, 32425)
inserire in table_xyz valori (124, $ uno, 'abcd4', 602, $ b, $ c, $ d, 32425)
inserire in table_xyz valori (125, $ uno, 'abcd4', 603, $ b, $ c, $ d, 32425)
inserire in table_xyz valori (126, $ e, 'abcd4', 601, $ b, $ c, $ d, 32425)
inserire in table_xyz valori (127, $ e, 'abcd4', 602, $ b, $ c, $ d, 32425)
inserire in table_xyz valori (128, $ e, 'abcd4', 603, $ b, $ c, $ d, 32425)

il problema è il modo in cui il 2 ° e 4 ° campi nella casella di ricerca dovrebbe b stampata. mentre il 2 ° settore dovrebbe b ripetuto 3 volte (come nella lettura di ogni riga del file di dati), il campo 4. incrementi a 3 e torna dopo ogni 3a riga del file ...

qualche suggerimento ...? bisogno di uno script di shell ...

Ho provato a modificare lo script della shell da Christoph ma l'uscita è tale che la stessa 3 domande sono ripetute tante volte quante sono le linee, a mio vi file di dati prima di passare ...
Closed Thread

Segnalibri

Tag
awk, awk trim, trim, trim awk

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 03:44 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0