![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread |
Rating:
|
Modalità di visualizzazione |
|
|
|
||||
|
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? |
|
||||
|
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 |
|
||||
|
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 |
|
|||||
|
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 > |
|
||||
|
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 |
|
||||
|
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.
|
![]() |
| Segnalibri |
| Tag |
| suddivisi per numero di linea, suddivisi per i file |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|