The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
File konvertering gehlnar Shell programmering og Skripting 4 04-17-2009 08:47
Filkonvertering sridhar_423 Shell programmering og Skripting 2 03-16-2009 04:47
Filkonvertering til ascii Mora UNIX for Advanced & ekspertbrukere 4 03-31-2008 01:29
Konvertering verktøyet xhtml filen til Postscript fil dattatray.b Sun Solaris 0 08-25-2005 07:36
filkonvertering hipo UNIX for Dummies Spørsmål og svar 1 07-24-2001 10:24

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 denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 04-23-2009
gehlnar gehlnar is offline
Registrert bruker
  
 

Bli Date: Jan 2009
Innlegg: 47
Fil konvertering og awk

Hei Alle,
Jeg er forvirret med utgang til inndatafilen og jeg bruker under kommando i skript for å få den forventede output.
Også jeg vil legge til en annen tilstand ved hjelp av logisk AND (& &) i stedet for $ 2 \u003d\u003d "L" ($ 4 \u003d 0 - $ 4) som $ 2 \u003d\u003d "L" & & $ 3 \u003d\u003d "L" ($ 4 \u003d 0 - $ 4) men jeg får noen awk feil.
Kan noen vennligst gi råd om dette kan du?

Code:
 
cat $FILENAME |grep "^PL"|tr -d '\015'|sort -k1,2|nawk -F'|' 'BEGIN {OFS="~"}$2=="L"{$4=0-$4};$6=="COM"?$6="SHS":$6="FMT";{arr[$1"~"$5"~"$6]+=$4} END {for (i in arr) {print i,arr[i]}}'>$TEMPFILE
Input File 
============
ISIN|BL|STATUS|QTY|SNAME|CLASS
PLKGHM000017|B|L|85000|KGHM|COM
PLPKO0000016|B|L|310000|PKO S.A.|COM
|B|L|0||
PLKGHM000017|L|L|35000|KGHM|COM
PL0000101937|B|L|100000|DS1110|GOV
|L|L|0||
PLKGHM000017|L|L|40000|KGHM|COM
PLPKO0000016|L|L|290000|PKO S.A.|COM
Present Output
==============
PL0000101937~B~L~100000~DS1110~FMT
PLKGHM000017~B~L~85000~KGHM~SHS
PLKGHM000017~L~L~-35000~KGHM~SHS
PLKGHM000017~L~L~-40000~KGHM~SHS
PLPKO0000016~B~L~310000~PKO S.A.~SHS
PLPKO0000016~L~L~-290000~PKO S.A.~SHS
PLPKO0000016~PKO S.A.~SHS~20000
PL0000101937~DS1110~FMT~100000
PLKGHM000017~KGHM~SHS~10000
Expected Output
==============
PLPKO0000016~PKO S.A.~SHS~20000
PL0000101937~DS1110~FMT~100000
PLKGHM000017~KGHM~SHS~10000
  #2 (permalink)  
Old 04-23-2009
devtakh devtakh is offline
Registrert bruker
  
 

Bli Dato: Oct 2007
Beliggenhet: Bangalore
Innlegg: 514
Sitat:
Originally Posted by gehlnar View Post
Hei Alle,
Jeg er forvirret med utgang til inndatafilen og jeg bruker under kommando i skript for å få den forventede output.
Også jeg vil legge til en annen tilstand ved hjelp av logisk AND (& &) i stedet for $ 2 \u003d\u003d "L" ($ 4 \u003d 0 - $ 4) som $ 2 \u003d\u003d "L" & & $ 3 \u003d\u003d "L" ($ 4 \u003d 0 - $ 4) men jeg får noen awk feil.
Kan noen vennligst gi råd om dette kan du?

Code:
 
cat $FILENAME |grep "^PL"|tr -d '\015'|sort -k1,2|nawk -F'|' 'BEGIN {OFS="~"}$2=="L"{$4=0-$4};$6=="COM"?$6="SHS":$6="FMT";{arr[$1"~"$5"~"$6]+=$4} END {for (i in arr) {print i,arr[i]}}'>$TEMPFILE
Input File 
============
ISIN|BL|STATUS|QTY|SNAME|CLASS
PLKGHM000017|B|L|85000|KGHM|COM
PLPKO0000016|B|L|310000|PKO S.A.|COM
|B|L|0||
PLKGHM000017|L|L|35000|KGHM|COM
PL0000101937|B|L|100000|DS1110|GOV
|L|L|0||
PLKGHM000017|L|L|40000|KGHM|COM
PLPKO0000016|L|L|290000|PKO S.A.|COM
Present Output
==============
PL0000101937~B~L~100000~DS1110~FMT
PLKGHM000017~B~L~85000~KGHM~SHS
PLKGHM000017~L~L~-35000~KGHM~SHS
PLKGHM000017~L~L~-40000~KGHM~SHS
PLPKO0000016~B~L~310000~PKO S.A.~SHS
PLPKO0000016~L~L~-290000~PKO S.A.~SHS
PLPKO0000016~PKO S.A.~SHS~20000
PL0000101937~DS1110~FMT~100000
PLKGHM000017~KGHM~SHS~10000
Expected Output
==============
PLPKO0000016~PKO S.A.~SHS~20000
PL0000101937~DS1110~FMT~100000
PLKGHM000017~KGHM~SHS~10000
kan du gi et eksempel på forventet produksjon her? Fra innlegget ditt, er det ikke klart hva du prøver å oppnå.


skål,
Devaraj Takhellambam
  #3 (permalink)  
Old 04-23-2009
gehlnar gehlnar is offline
Registrert bruker
  
 

Bli Date: Jan 2009
Innlegg: 47
Hei,

Dette er forventet produksjon.

Forventet utdata
\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d
PLPKO0000016 ~ PKO SA ~ SHS ~ 20000
PL0000101937 ~ DS1110 ~ FMT ~ 100000
PLKGHM000017 ~ KGHM ~ SHS ~ 10000

Men hvis du ser mitt opprinnelige innlegg får jeg dette, men sammen med noen andre poster. Gi meg beskjed hvis du har ytterligere spørsmål om dette.

Skål,
gehlnar


  #4 (permalink)  
Old 04-23-2009
vgersh99's Avatar
vgersh99 vgersh99 is online now Forum Staff  
Moderator
  
 

Bli Date: Feb 2005
Sted: Boston, MA
Innlegg: 5122
Du virkelig trenger ikke 'cat', 'grep' osv. ... - Awk kan gjøre alt selv.

nawk-f geh.awk myfile

geh.awk:
Code:
BEGIN {
  FS="|"
  OFS="~"
}
!/^PL/ { next }
$2=="L" && $3=="L" {$4=0-$4}
{
  $6=($6=="COM")?"SHS":"FMT"
  arr[$1 OFS $5 OFS $6]+=$4
}
END {
  for (i in arr)
    print i,arr[i]
}
Men jeg ikke får den forventede produksjonen, selv om jeg har prøvd å følge koden din.
  #5 (permalink)  
Old 04-23-2009
gehlnar gehlnar is offline
Registrert bruker
  
 

Bli Date: Jan 2009
Innlegg: 47
Takk Vgersh, har jeg riktige koden som pr ditt råd.

Jeg får forventet utgang hvis jeg bruker awk operasjon to ganger dvs. ved å lagre resultatet før array drift
og på ny fil hvis jeg bruker array drift Jeg får riktig utgang.

Men som jeg brukte awk to ganger, tenkte jeg å kombinere det. Gjør vi noe som pipe i awk?


Så det vil bli som først få denne filen ..

Code:
PL0000101937~B~L~100000~DS1110~FMT
PLKGHM000017~B~L~85000~KGHM~SHS
PLKGHM000017~L~L~-35000~KGHM~SHS
PLKGHM000017~L~L~-40000~KGHM~SHS
PLPKO0000016~B~L~310000~PKO S.A.~SHS
PLPKO0000016~L~L~-290000~PKO S.A.~SHS
og deretter utføre rekke driften av beregning på dette, men Mitt spørsmål er, kan ikke dette gjøres ved hjelp av én awk operasjon.
  #6 (permalink)  
Old 04-23-2009
vgersh99's Avatar
vgersh99 vgersh99 is online now Forum Staff  
Moderator
  
 

Bli Date: Feb 2005
Sted: Boston, MA
Innlegg: 5122
Jeg vet ikke helt hva du gjør - beklager.
Kan du legge trinnene, og den modifiserte koden, kan du?
  #7 (permalink)  
Old 04-23-2009
gehlnar gehlnar is offline
Registrert bruker
  
 

Bli Date: Jan 2009
Innlegg: 47
vgersh,

Trinn 1: Innledende filkonvertering enkel beregning
Code:
cat INPUTFILE |tr -d '\015'|sort -k1,2|nawk -F'|' 
'BEGIN {OFS="~"}!/^PL/{next}$2=="L" && $3=="L"
{$4=0-$4};$6=="COM"?$6="SHS":$6="FMT"{print $0}'>TEMPFILE
Trinn 2: Faktisk beregning for å få forventet produksjon ved hjelp av over produksjon av TEMPFILE
Code:
 awk -F'~' '{OFS="~"}{arr[$1OFS$5OFS$6]+=$4} END 
  {for (i in arr) {print i,arr[i]}}'<TEMPFILE>EXPECTEDFILE
Jeg bruker ovennevnte to trinn i et skript, Håper dere fikk en ide fra den og min idé var å kombinere
disse to trinnene til én.

Skål,
gehlnar
Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 01:25.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0