The UNIX and Linux Forums  

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
suddivisi in base al numero di caratteri chriss_58 Shell scripting e di programmazione 6 07-06-2008 11:05 AM
Split di un file basati su pattern di awk, grep, sed o perl kumarn Shell scripting e di programmazione 5 06-20-2008 11:51 AM
Split di un file senza alcun motivo - Spalato, Csplit, Awk madhunk UNIX for Dummies Domande & Risposte 10 12-17-2007 12:57 PM
l'estrazione di una linea basata sul numero di riga narendra.pant Shell scripting e di programmazione 2 09-20-2007 06:00 AM
awk script per dividere un file in base alla condizione superprogrammer Shell scripting e di programmazione 12 06-14-2005 04:59 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 Rating: Thread Rating: 2 votes, 4.50 average. Modalità di visualizzazione
  #1 (permalink)  
Old 09-30-2008
shankster shankster is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 3
Split File Basato sul numero di riga Pattern

Ciao tutti.

Scusa, so che questo problema è simile a molti altri, ma mi sembra semplicemente di mettere insieme esattamente che cosa ho bisogno.

Il mio file è scheda delimitted e contiene circa 1 milione di righe. Vorrei inviare linee 1,4, e 7 in un file. Linee 2, 5, e 8 ad un secondo file. Linee 3, 6, e 9 a un terzo file, e poi la linea 10 ad un quarto di file. Ho poi desidera ripetere questa condizione utilizzando lo stesso scenario, e gli stessi quattro file di cui sopra. Qualsiasi riflessione sul metodo migliore?
  #2 (permalink)  
Old 09-30-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Iscriviti Data: dicembre 2007
Location: Home di 17-volte campione del mondo Boston Celtics
Interventi: 1.311
Cool Ho avuto un inizio di questo

Ma ho bisogno di qualche aiuto awk (o per pensare un po 'più chiara dopo aver mangiato a pranzo)


Codice:
> cat big_file4
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
d stuff to 4 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
d stuff to 4 file

Quello che ho scritto inizialmente non catturare il file riga di testo - e, se penso che Ho bisogno di aiuto!

Codice:
> cat -n big_file4 | awk '{printf "%1s %-15s \n", substr($1,length($1),1), $2}'
1 a               
2 b               
3 c               
4 a               
5 b               
6 c               
7 a               
8 b               
9 c               
0 d               
1 a               
2 b               
3 c               
4 a               
5 b               
6 c               
7 a               
8 b               
9 c               
0 d

Perché da qui, la mia teoria è che


Codice:
grep "^[147] " <infile >outfile_a
grep "^[258] " <infile >outfile_b
grep "^[369] " <infile >outfile_c
grep "^[0] " <infile >outfile_d

Può essere necessario per tagliare prima di scrivere per ogni uscita.
  #3 (permalink)  
Old 09-30-2008
epoca era is offline Forum Advisor  
Herder di Inutile Gatti (Su sabbatico)
  
 

Iscriviti Data: marzo 2008
Ubicazione: / ci / è / solo / bin / sh
Interventi: 3.652
Perl o Python ciclare su un set di handle di file che sembrano i più efficiente. Per una soluzione più pedonale, eseguire uno script awk quattro volte con parametri diversi potrebbe essere accettabile anche se il file è grande.

Il file contiene solo quattro ogni decima riga, e poi 11, 14, e 17 apri il primo file?


Codice:
perl -MIO::File -ne 'BEGIN { map { $file[$_] = IO::File->new(">file$_") || die $!} 0..3; 
  @m = (0, 1, 2, 0, 1, 2, 0, 1, 2, 3);
}
$file[$m[$. % 9]]->print || die $!'

csplit è abbastanza versatile alcune opzioni, potrebbe essere in grado di tirare fuori questo semplicemente con un adeguato csplit pattern, come bene.

Ultimo a cura di epoca; al 09/30/2008 01:56 PM.. Motivo: csplit nota
  #4 (permalink)  
Old 09-30-2008
shankster shankster is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 3
Sì, 11,14, 17 e poi andare al primo file.

Sto cercando di utilizzare KSH per completare questo compito. Qui di seguito è quello che ho finora, ma il conteggio variabile non sembra essere il ripristino a 1 dopo che raggiunge 11. Inoltre, io sono sempre un output simile a:

File_split_DC.sh [42]: 2: non trovato.
File_split_DC.sh [42]: 3: non trovato.
File_split_DC.sh [42]: 4: non trovato.

Il nome del mio script è "File_split_DC.sh"

#! / usr / bin / ksh

count \u003d 1

mentre leggere linea
fare

$ count caso in
1)
echo "$ linea">> RT1.txt
;;
2)
echo "$ linea">> RT2.txt
;;
3)
echo "$ linea">> RT3.txt
;;
4)
echo "$ linea">> RT1.txt
;;
5)
echo "$ linea">> RT2.txt
;;
6)
echo "$ linea">> RT3.txt
;;
7)
echo "$ linea">> RT1.txt
;;
8)
echo "$ linea">> RT2.txt
;;
9)
echo "$ linea">> RT3.txt
;;
10)
echo "$ linea">> RT4.txt
;;
esac
((Count + \u003d 1))

se $ count-gt 10, quindi
count \u003d 1

fi
fatto <My_Test.txt

exit 0
  #5 (permalink)  
Old 09-30-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Iscriviti Data: dicembre 2007
Location: Home di 17-volte campione del mondo Boston Celtics
Interventi: 1.311
Wink ciò che su questo?


Codice:
> cat -n big_file4 | awk '{printf "%1s %-100s \n", substr($1,length($1),1), $0}' | cut -c1,10- | grep "^[147]" | cut -c2- >filea
> cat -n big_file4 | awk '{printf "%1s %-100s \n", substr($1,length($1),1), $0}' | cut -c1,10- | grep "^[258]" | cut -c2- >fileb
> cat -n big_file4 | awk '{printf "%1s %-100s \n", substr($1,length($1),1), $0}' | cut -c1,10- | grep "^[369]" | cut -c2- >filec
> cat -n big_file4 | awk '{printf "%1s %-100s \n", substr($1,length($1),1), $0}' | cut -c1,10- | grep "^[0]" | cut -c2- >filed


Codice:
> cat big_file4
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
d stuff to 4 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
a stuff to 1 file
b stuff to 2 file
c stuff to 3 file
d stuff to 4 file

e ora i quattro file separati

Codice:
> cat filea
a stuff to 1 file                                                                             
a stuff to 1 file                                                                             
a stuff to 1 file                                                                             
a stuff to 1 file                                                                             
a stuff to 1 file                                                                             
a stuff to 1 file                                                                             
> cat fileb
b stuff to 2 file                                                                             
b stuff to 2 file                                                                             
b stuff to 2 file                                                                             
b stuff to 2 file                                                                             
b stuff to 2 file                                                                             
b stuff to 2 file                                                                             
> cat filec
c stuff to 3 file                                                                             
c stuff to 3 file                                                                             
c stuff to 3 file                                                                             
c stuff to 3 file                                                                             
c stuff to 3 file                                                                             
c stuff to 3 file                                                                             
> cat filed
d stuff to 4 file                                                                             
d stuff to 4 file                                                                             
>

  #6 (permalink)  
Old 09-30-2008
epoca era is offline Forum Advisor  
Herder di Inutile Gatti (Su sabbatico)
  
 

Iscriviti Data: marzo 2008
Ubicazione: / ci / è / solo / bin / sh
Interventi: 3.652
Si desidera


Codice:
if [ $count -gt 10 ]; then

Sarebbe più efficace per aprire quattro descrittori di file e poi stampa a quelle descrittori; questo approssima la Perl approccio che ho suggerito sopra.


Codice:
exec 1>rt1.txt 2>rt2.txt 3>rt3.txt 4>rt4.txt
count=1
while read line; do
  case $count in
    1|4|7) print "$line" >&1;;
    2|5|8) print "$line" >&2;;
    3|6|9) print "$line" >&3;;
    10) print "$line" >&4; count=0;;
  esac
  count=`expr $count + 1`
done <My_Test.txt

Notare l'uso di stampa piuttosto che echo - Questo è ksh-specifiche, ma diverso da quello, questo script dovrebbe essere portatile.

Ultimo a cura di epoca; al 09/30/2008 02:15 PM.. Motivo: Nota stampa vs echo
  #7 (permalink)  
Old 09-30-2008
shankster shankster is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 3
Grazie ad entrambi per il vostro ingresso. Davvero non so cosa sto facendo quando si tratta di UNIX, così ho appena provi a pezzo tidbits insieme. Ho finito per usare ERA L'approccio nel secondo distacco. E 'stato simile a quello che avevo già messo insieme, e ha senso. JOEYG, sono sicuro che il tuo lavoro come appraoch sarebbe bene, e apprezzo il vostro contributo.
Closed Thread

Segnalibri

Tag
suddivisi per numero di linea, suddivisi per i file

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 è 07:17 PM.


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