The UNIX and Linux Forums  
Olá e boas-vindas de Estados Unidos para o UNIX e Linux Forum! Obrigado por visitar e fazer parte da nossa comunidade global.

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
Múltiplos separadores de campos no awk? (Primeira um espaço e, em seguida, um cólon) doubleminus UNIX para Dummies Perguntas & Respostas 3 04-27-2008 03:28
Preciso de ajuda para contagem dos campos e separadores de campos usando Nawk scrappycc Programação Shell Script e 3 02-06-2008 11:47
você pode redirecionar vários arquivos de entrada? Matrix_Prime UNIX para Dummies Perguntas & Respostas 4 02-27-2005 07:07
Awk Múltipla Campo Separators Tonka52 Programação Shell Script e 7 04-07-2004 09:37
Multiple Output Campo de arquivo de banco de dados Dennz UNIX para Dummies Perguntas & Respostas 3 09-01-2003 12:41

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-25-2008
kinksville kinksville is offline
Usuário
  
 

Join Date: Apr 2008
Posts: 7
Cool Múltiplas entrada em campo Separators awk.

Eu vi um jovem de postos de trabalho aqui referenciando como lidar com mais de um campo de entrada no separador awk. Eu imaginei que eu gostaria de partes (só!) Descobriu a forma de transformar essa linha em um logfile:

90000000000000000000010001 nome D0.90000000000103787900010001QF840840916070000007085814Y216254 @ D1111111111111111 \u003d 1107xxxxxxxxxxxxxxx x919MENCHIES

para este formato:

90000000000000000000010001, nome 840840916070000007085814Y216654, 1111111111111111,1107,919 MENCHIES

Eu tenho um script todo uma vez que este é apenas um passo num processo de transformar registros em informações úteis, mas veja a parte relevante.

# Autor: kinksville
# Data: 24 de abril de 2008
# Revisto: 24 de abril de 2008
# Revisão: Revisão 1,00
# Outros arquivos: cclookup.s, cclookup.rep
# Changelog:
# 24 de abril de 2008: Primeiro criação do script.
#
# End changelog.

BEGIN (
FS \u003d "[\. QF \ @ D \u003d x] +"
OFS \u003d ","
)
# Primeira iteração do @ D pesquisa, o descascamento. personagem e inserindo uma OFS.
/ \ @ D / (# Pesquisa para qualquer linha que contenha a string @ D
report2 \u003d "cclookup.rep2"; # Definir report2 variável.
relatório \u003d "cclookup.rep"; # Definir relatório variável.
num_cclookup + +; # auth Obter número de pedidos.
print $ 1, $ 2, $ 5, $ 6, $ 7, $ 8> relatório;
print $ 0> report2;
) # Fim do @ D pesquisa.


A chave é o fato de que awk irá aceitar uma expressão regular como arquivo separador. Este regexp FS \u003d "[\. QF \ @ D \u003d x] +" jogos espaços, o. QF a string, a string @ D, a \u003d, eo caráter x. A + após a rasteira braquete é a chave, uma vez que permite a 1 ou mais ocorrências de qualquer um dos caracteres que coincidem com a regexp.

Isso significa que x e xxxxxx são ambos tratados como um único campo de separação.

Eu ainda preciso de trabalhar na produção, já que agora eu preciso para cortar o nome fora da final do último campo. Infelizmente, o número do último campo pode ir em qualquer lugar 9999999-1 e que é a parte que eu quero preservar. Talvez um [^ 0-9] + expressão?
  #2 (permalink)  
Old 04-25-2008
aigles's Avatar
aigles aigles is offline Forum Advisor  
Usuário
  
 

Join Date: Apr 2004
Location: Bordeaux, França
Mensagens: 1.420
Tem certeza de que o FS definição é válida para a sua necessidade?
Você não define "@ D" e "QF" como separador.
Os caracteres @, D, Q e F são definir como separadores.

A sintaxe é válida:
Código:
FS  = "([[:space:]]|\\.|QF|=|x)+";
A obter o último campo sem prefixing dígitos:
Código:
last_field=$NF
sub(/^[0-9]*/, "", last_field);
Jean-Pierre.
  #3 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Usuário
  
 

Join Date: Apr 2008
Posts: 7
Eu estava um pouco confuso com o facto de QF @ D e estavam trabalhando também. Penso que a sua porque [QF] + jogos QQ QQQ QF QQFF etc

Não é tão limpa quanto eu ia gostar, mas os personagens são sempre naquele determinado lugar na autenticado mensagem, por isso ele faz o que eu quero fazer.

I'll sub na sua expressão e ver o que acontece muito
  #4 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Usuário
  
 

Join Date: Apr 2008
Posts: 7
Não temos tanta sorte

Citação:
Originally Posted by aigles View Post
A sintaxe é válida:
Código:
FS  = "([[:space:]]|\\.|QF|=|x)+";

Citação:
Originally Posted by aigles View Post
A obter o último campo sem prefixing dígitos:
Código:
last_field=$NF
sub(/^[0-9]*/, "", last_field);
Jean-Pierre.


Nenhum destes fragmentos funcionou corretamente para mim. O FS sintaxe que você usou provavelmente mudou o número de campos e assim eles não obter todos os impressos.

O segundo trecho parecia apenas para adicionar o # 1 para o último campo ou seja (, 619MENCHIES1).

Eu vou jogar com ela um pouco mais e ver o que acontece.
  #5 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Usuário
  
 

Join Date: Apr 2008
Posts: 7
Cool Então aqui é o que finalmente me deu o resultado eu estava procurando.

Código:
#This script scans the appropriate log file and copies lines containing authorization requests to the output.
#All output is comma separated.
#Author:        kinksville
#Date:          April 24, 2008
#Revised:       April 25, 2008
#Revision:      Revision 1.01
#Other files:   cclookup.s, cclookup.rep
#Changelog:
#April 24, 2008: Initial creation of the script.
#April 25, 2008: Updated the regex for the input FS to match multiple characters.
#
#End changelog.

BEGIN {
#Input field separators will match any of the following characters/strings: blank space, . , QF, @D, =, x (repeating).
#The + on the outside of the brackets will allow it to match 0 or more instances of any of the characters/strings in any combination.
#%  Any comments with the % sign are temporarily there for testing purposes.
FS="[ \. QF \@D = x]+"
#Output field separator is defined as a comma.
OFS = ","
}
#@D search, stripping out the field separator characters and inserting a OFS.
/\@D/                {                                                          #Search for any line containing the string @D
                        last_field=$8 ;
                        sub(/[^0-9]*/,"",last_field );
                        dollar_val=last_field/100 ;
                        report="cclookup.rep";                                  #Define report variable.
                        num_cclookup++;                                         #Get number of auth requests.
                        field1=$1 ;
                        field2=$2 ;
                        field3=$5 ;
                        field4=$6 ;
                        field5=$7 ;
                        printf ("%s,%s,%s,%s,%s,$%-.2f\n",field1,field2,field3,field4,field5,dollar_val) > report
                        #print $1, $2, $5, $6, $7, $8 > report;                 #Print fields 1-2 with the OFS between them to report.
                        }                                                       #End of the @D search.
É um pouco de um kludge mas funciona. Parece que eu não poderia obter o last_field variável para imprimir para fora, não importa o que eu fiz usando o comando simples impressão, que é por isso que eu ia acabar com printf vez. Isso também me permitiu saída dos resultados em um formato decimal, uma vez que estes números foram MENCHIES antes do dólar montantes.

Última edição por kinksville; em 04/25/2008 05:13.. Motivo: Removido nome completo dos comentários.
Closed Thread

Marcadores

Tags
awk, awk caimento, caimento, caimento awk

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 06:07.


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