The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Arquivo conversão gehlnar Programação Shell Script e 4 04-17-2009 08:47
Conversão de ficheiros sridhar_423 Programação Shell Script e 2 03-16-2009 04:47
Arquivo conversão para ascii Mora UNIX & avançada para usuários experientes 4 03-31-2008 01:29
Conversão utilitário xhtml arquivo para arquivo PostScript dattatray.b Sun Solaris 0 08-25-2005 07:36
arquivo conversão hipo UNIX para Dummies Perguntas & Respostas 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 Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 04-23-2009
gehlnar gehlnar is offline
Usuário
  
 

Join Date: Jan 2009
Lugares: 47
Arquivo conversão e awk

Oi Pessoal,
Estou confuso com a saída do arquivo de entrada e estou usando comando no script abaixo para obter o resultado esperado.
Também gostaria de acrescentar outra condição usando lógica AND (&) em lugar de US $ 2 \u003d\u003d "L" ($ 4 \u003d 0 - $ 4) como $ 2 \u003d\u003d "L" & & $ 3 \u003d\u003d "L" ($ 4 \u003d 0 - $ 4) mas estou recebendo alguns awk erro.
Pode alguém por favor avise sobre este por favor?


Código:
 
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
Usuário
  
 

Join Date: Oct 2007
Local: Bangalore
Lugares: 514
Citação:
Originally Posted by gehlnar View Post
Oi Pessoal,
Estou confuso com a saída do arquivo de entrada e estou usando comando no script abaixo para obter o resultado esperado.
Também gostaria de acrescentar outra condição usando lógica AND (&) em lugar de US $ 2 \u003d\u003d "L" ($ 4 \u003d 0 - $ 4) como $ 2 \u003d\u003d "L" & & $ 3 \u003d\u003d "L" ($ 4 \u003d 0 - $ 4) mas estou recebendo alguns awk erro.
Pode alguém por favor avise sobre este por favor?


Código:
 
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
você pode fornecer uma amostra da produção esperada aqui? De seu posto, não está claro o que você está tentando alcançar.


felicidades,
Devaraj Takhellambam
  #3 (permalink)  
Old 04-23-2009
gehlnar gehlnar is offline
Usuário
  
 

Join Date: Jan 2009
Lugares: 47
Oi,

Esta é a saída esperada.

Saída esperada
\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d
PKO SA PLPKO0000016 ~ ~ ~ 20000 SHS
PL0000101937 ~ DS1110 FMT ~ ~ 100.000
PLKGHM000017 ~ ~ KGHM SHS ~ 10000

Mas se você ver o meu post original, mas estou ficando esta, juntamente com alguns outros registros. Por favor, deixe-me saber se você tem mais dúvida sobre isso.

Felicidades,
gehlnar


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

Join Date: Feb 2005
Localização: Boston, MA
Mensagens: 5.131
Você realmente não precisa 'gato', 'grep' etc ... - Awk pode fazer tudo em si.

nawk-f geh.awk myfile

geh.awk:

Código:
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]
}

Mas eu não estou ficando sua esperada saída, embora eu tenha tentado seguir o seu código.
  #5 (permalink)  
Old 04-23-2009
gehlnar gehlnar is offline
Usuário
  
 

Join Date: Jan 2009
Lugares: 47
Graças Vgersh, tenho o código correto como por seu aconselhar.

Estou recebendo esperada saída Se eu usar awk operação por duas vezes, ou seja, armazenar o produto antes de array operação
e no novo arquivo se eu usar array operação Estou recebendo saída correta.

Mas como eu estava usando awk, duas vezes, pensei em sua combinação. Será que algo parecido com tubo em awk?


Então vai ser como primeiro obter este ficheiro ..


Código:
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

e, em seguida, executar matriz sobre esta operação de cálculo, mas a minha pergunta é esta não pode ser feito usando uma awk operação.
  #6 (permalink)  
Old 04-23-2009
vgersh99's Avatar
vgersh99 vgersh99 is online now Forum Staff  
Moderador
  
 

Join Date: Feb 2005
Localização: Boston, MA
Mensagens: 5.131
I don't quite seguir o que você está fazendo - desculpe.
Poderia postar as etapas eo código modificado, por favor?
  #7 (permalink)  
Old 04-23-2009
gehlnar gehlnar is offline
Usuário
  
 

Join Date: Jan 2009
Lugares: 47
vgersh,

Etapa 1: Conversão de ficheiros para a base inicial cálculo

Código:
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

Passo 2: cálculo real para obter resultados esperados usando acima da saída de TEMPFILE

Código:
 awk -F'~' '{OFS="~"}{arr[$1OFS$5OFS$6]+=$4} END 
  {for (i in arr) {print i,arr[i]}}'<TEMPFILE>EXPECTEDFILE

Eu estou usando duas etapas acima mencionadas, em um script, Esperança tens alguma idéia com ele e minha idéia foi a de combinar
estes dois passos em um.

Felicidades,
gehlnar
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 11:04.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0