The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
sed query gopsman Shell Programmering og Scripting 4 02-03-2009 02:41 AM
& I SQL forespørgsel Lindarella Shell Programmering og Scripting 3 10-09-2006 05:43 PM
Forespørgsel i awk raguramtgr UNIX for dummyer Spørgsmål & svar 1 08-27-2004 12:00 PM
RPM Query silvaman UNIX for Advanced & Ekspertsøgning Brugere 1 08-15-2003 08:56 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 Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 12-07-2006
grinder182533 grinder182533 is offline
Registreret Bruger
  
 

Join Date: Nov 2006
Stillinger: 17
sed query

Jeg har en række mapper / temp / a / temp / b / temp / c

I mapper a, b og c, jeg har filer
a1.txt ... ... .... a20.txt
b1.txt ... ... .... b40.txt &
c1.txt ... ... .... c60.txt

Hver fil har samme data format: --

Linje 1 AAAAA aaaa
Linje 2 BBB bbbbbb
Linje 3 CCCC CCCCCC
Etc etc

Jeg har brug for at skrive en sed script, der vil gå igennem alle de filer, omformatere de data, således: --

Linje 1 AAAAA aaaa
Linje 2 BBB
Linje 3 X bbbbbb
Linje 4 CCCC CCCCCC
Etc etc

Så jeg har brug for at indsætte en CR / LF i linje 2 holdning 4,
oprette en ny linje 3 med en konstant tekst (X), og værdien af, hvad der var til højre for den tidligere linje 2 (bbbbbb)
og flytte de resterende linjer en linje ned.

Can anyone help please?
Jeg ved ikke, sed meget godt, og awk slet ikke.
  #2 (permalink)  
Old 12-07-2006
blowtorch's Avatar
blæselampe blowtorch is offline Forum Advisor  
Supporter
  
 

Join Date: Dec 2004
Location: Singapore
Posts: 2.350
Fungerer det?

Code:
awk '{if(NR==2) print $1,"\nX",$2; else print}' filename > filename.new
mv filename.new filename

Køre dette gennem en løkke på hver fil.

Bemærk, at jeg har antaget, at teksten i dine filer lige er, som du viser det (nøjagtigt det samme antal og placering af plads tegn, at være specifik). Selv om det ikke er du bare nødt til at ændre awk en smule.
  #3 (permalink)  
Old 12-08-2006
anbu23 anbu23 is offline Forum Advisor  
Registreret Bruger
  
 

Join Date: Mar 2006
Beliggenhed: Bangalore, Indien
Indlæg: 1.398
SED løsning


Code:
cd /a
for file in *
do
    sed "2 s/\(...\).\(.*\)/\1\\
    X \2/" $file > tmp
    mv tmp $file
done

  #4 (permalink)  
Old 12-08-2006
grinder182533 grinder182533 is offline
Registreret Bruger
  
 

Join Date: Nov 2006
Stillinger: 17
sed løsning

Tak Anbu23
Når jeg sendt i går, jeg forenklet mit problem, tænkte, at jeg kunne følge din logik, og anvende det til mit egentlige problem.
Faktisk er det linie 5 stilling, 32, inden som CR / LF skal indsættes.
Den nye linje 6 vil indeholde faste tekst fra position 1 til 31 inklusive, (X)
og stilling fra 32 til 34 fra linje 5, vil være faldet ned til de samme holdninger til linje 6.
Jeg forsøgte
sed "5 s / \ (... \). \ (.* \) / \ 1 \ \
X \ 2 / "$ file> tmp
men dette stadig spildt efter 3 tegn.

Jeg forsøgte
sed "5 s / \ (............................. \). \ (.* \) / \ 1 \ \
X \ 2 / "$ file> tmp
men fik en syntaksfejl.
Håber du kan også hjælpe.
Tak
  #5 (permalink)  
Old 12-08-2006
anbu23 anbu23 is offline Forum Advisor  
Registreret Bruger
  
 

Join Date: Mar 2006
Beliggenhed: Bangalore, Indien
Indlæg: 1.398
Tidligere du at vide, at efter første par tegn i nogle linje skal flyttes til næste linje med X. Men nu du fortæller at du har brug for indledende char og X og de resterende char i nye line.I er ikke i stand til at få dig.
Kan du give mig eksempel?
  #6 (permalink)  
Old 12-08-2006
grinder182533 grinder182533 is offline
Registreret Bruger
  
 

Join Date: Nov 2006
Stillinger: 17
sed eksempel

Hi Anbu23

input

Ref: 12345678 ^ M
Værdi Dato: 28-MAY-2006 ^ M
Debet A / c: 54321235 - abcdef ^ M
Kunde: 100210547 - abcdef ^ M
Debit Amount: 9999999999,00 USD ^ M
Beskrivelse: ledning til Wxxxxxx ^ M
^ M
Exchange Rate: 1,00000 ^ M
etc etc

skal blive til

Ref: 12345678 ^ M
Værdi Dato: 28-MAY-2006 ^ M
Debet A / c: 54321235 - abcdef ^ M
Kunde: 100210547 - abcdef ^ M
Debit Amount: 9999999999,00 ^ M
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx USD ^ M
Beskrivelse: ledning til Wxxxxxx ^ M
^ M
Exchange Rate: 1,00000 ^ M
etc etc

opskæring & indsætte har udlignet i displayet over,
men mit tidligere linje 5 position 31 er korrekte.
Bemærk også, at der er masser af plader i hver fil,
og alle skal formateres.
Mange tak igen
Jeg sætter pris på din støtte.
  #7 (permalink)  
Old 12-08-2006
cskumar cskumar is offline
Registreret Bruger
  
 

Join Date: oktober 2005
Stillinger: 67
prøv denne her

awk '(if (match ($ 0, "USD")) (print $ 1 $ 2 $ 3, "\ nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", $ 4) print $ 0)' fil> newfile

Jeg håber USD kommer kun i Debit Amount: felt.

Hilsen,
cskumar
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 11:23 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0