The UNIX and Linux Forums  

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
split baserat på antalet tecken chriss_58 Shell-programmering och Skript 6 07-06-2008 11:05
Dela en fil baserat på mönster i awk, grep, sed eller perl kumarn Shell-programmering och Skript 5 06-20-2008 11:51
Dela en fil med något mönster - Split, Csplit, awk madhunk UNIX for Dummies Frågor & Svar 10 12-17-2007 12:57
utvinna en linje som bygger på radnumret narendra.pant Shell-programmering och Skript 2 09-20-2007 06:00
awk-skript för att dela upp en fil baserat på villkor superprogrammer Shell-programmering och Skript 12 06-14-2005 04:59

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 denna tråd Omdöme: Thread Rating: 2 votes, 4.50 average. Visningslägen
  #1 (permalänk)  
Old 09-30-2008
shankster shankster is offline
Registered User
  
 

Join Date: Sep 2008
Inlägg: 3
Split File Baserat på Radnummer Mönsterredigeraren

Hej alla.

Förlåt, jag vet att denna fråga liknar många andra, men jag kan vara att sätta ihop precis vad jag behöver.

Mitt ärende är fliken delimitted och innehåller ungefär 1 miljon rader. Jag skulle vilja skicka linjerna 1,4, & 7 till en fil. Linjer 2, 5, och 8 till en andra akt. Linjer 3, 6, och 9 till en tredje fil, och sedan linje 10 till en fjärde fil. Jag vill upprepa detta villkor med samma scenario, och samma fyra filer ovan. Alla tankar om den bästa metoden?
  #2 (permalänk)  
Old 09-30-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
Modérateur
  
 

Join Date: Dec 2007
Ort: Home av 17-Temne världen mästare Boston Celtics
Inlägg: 1311
Cool Jag fick en start på detta

Men jag behöver några awk hjälp (eller för att tänka lite klarare efter att ha ätit lunch)


Kod:
> 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

Vad jag ursprungligen skrev inte fångar upp filen rad med text - och där jag tror att jag behöver hjälp!

Kod:
> 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

Eftersom härifrån, min teori är att


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

Kan behöva klippa sig innan han skrev till varje produktion.
  #3 (permalänk)  
Old 09-30-2008
eran era is offline Forum Advisor  
Herder av Useless Cats (På sabbatsår)
  
 

Join Date: mars 2008
Ort: / det är / / bara / bin / sh
Inlägg: 3652
Perl eller Python looping över en uppsättning filreferenser tycks i likhet med de flesta i en effektiv strategi. För en mer fotgängarsäkerheten lösning, en awk skriptet körs fyra gånger med olika parametrar kan vara godtagbar även om filen är stor.

Har fil fyra endast innehålla vart tionde linje och sedan 11, 14 och 17 går till den första filen igen?


Kod:
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 har några ganska mångsidiga alternativ, du kan dra det här helt enkelt med en lämplig csplit mönstret också.

Senast redigerad av era; 09-30-2008 vid 01:56.. Motivering: csplit anmärkning
  #4 (permalänk)  
Old 09-30-2008
shankster shankster is offline
Registered User
  
 

Join Date: Sep 2008
Inlägg: 3
Ja, 11,14 och 17 skulle gå till den första filen igen.

Jag försöker använda ksh att fullgöra denna uppgift. Nedan är vad jag har hittills, men räkna variabel inte tycks vara att återställa till 1 efter den når 11. Även jag får utgångsenergi liknande:

File_split_DC.sh [42]: 2: hittades inte.
File_split_DC.sh [42]: 3: hittades inte.
File_split_DC.sh [42]: 4: hittades inte.

Namnet på mitt manus är "File_split_DC.sh"

#! / usr / bin / ksh

count \u003d 1

samtidigt läsa linje
göra

fallet $ count i
1)
echo "$ line">> RT1.txt
;;
2)
echo "$ line">> RT2.txt
;;
3)
echo "$ line">> RT3.txt
;;
4)
echo "$ line">> RT1.txt
;;
5)
echo "$ line">> RT2.txt
;;
6)
echo "$ line">> RT3.txt
;;
7)
echo "$ line">> RT1.txt
;;
8)
echo "$ line">> RT2.txt
;;
9)
echo "$ line">> RT3.txt
;;
10)
echo "$ line">> RT4.txt
;;
ESAC
((Count + \u003d 1))

om $ count-gt 10, därefter
count \u003d 1

fi
gjort <My_Test.txt

exit 0
  #5 (permalänk)  
Old 09-30-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
Modérateur
  
 

Join Date: Dec 2007
Ort: Home av 17-Temne världen mästare Boston Celtics
Inlägg: 1311
Wink vad händer här?


Kod:
> 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


Kod:
> 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

och nu fyra åtskilda filer

Kod:
> 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 (permalänk)  
Old 09-30-2008
eran era is offline Forum Advisor  
Herder av Useless Cats (På sabbatsår)
  
 

Join Date: mars 2008
Ort: / det är / / bara / bin / sh
Inlägg: 3652
Du vill


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

Det vore effektivare att öppna fyra fil deskriptorer och sedan bara skriva ut dem deskriptorer, vilket ungefär Perl tillvägagångssätt jag föreslog ovan.


Kod:
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

Observera användningen av Skriv ut snarare än echo - Det här är ksh-specifik, men förutom att det här skriptet bör bärbara.

Senast redigerad av era; 09-30-2008 vid 02:15.. Orsak: Obs print vs echo
  #7 (permalänk)  
Old 09-30-2008
shankster shankster is offline
Registered User
  
 

Join Date: Sep 2008
Inlägg: 3
Tack till er båda för din input. Jag vet inte vad jag gör när det gäller UNIX, så jag bara försöka att pussla godbitar tillsammans. Jag slutade med hjälp av ERA: s strategi i andra meddelanden. Det liknar vad jag redan hade tillsammans, och var vettigt. JOEYG, jag är säker på din appraoch skulle fungera lika bra, och jag tackar för din input.
Closed Thread

Komihåglista

Taggar
uppdelat på radnumret, delade filer

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 11:36.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0