The UNIX and Linux Forums  


Go Back   В UNIX и Linux Форумы > Топ форумы > Shell программирование и сценарии
.
Google unix.com



Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь.

Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Несколько области сепараторов в AWK? (Первый пробел, затем двоеточие) doubleminus UNIX для чайников Вопросы И Ответы 3 04-27-2008 04:28 PM
Мне нужна помощь подсчета области и области с использованием сепараторов Nawk scrappycc Shell программирование и сценарии 3 02-06-2008 11:47 PM
Вы можете перенаправить несколько файлов для ввода? Matrix_Prime UNIX для чайников Вопросы И Ответы 4 02-27-2005 07:07 PM
Awk несколькими полевыми Сепараторы Tonka52 Shell программирование и сценарии 7 04-07-2004 10:37 PM
Результат Множественное поле из базы данных Dennz UNIX для чайников Вопросы И Ответы 3 09-01-2003 01:41 PM

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 Оценить Thread Режимы дисплея
Old 04-25-2008
kinksville kinksville is offline
Зарегистрированный пользователь
  
 

Регистрация: Apr 2008
Сообщений: 7
Cool Множественные поля ввода Сепараторы в AWK.

Я видел несколько постов здесь ссылок, как обрабатывать более одного поля ввода разделителя в AWK. Я понял я хотел бы поделиться, как я (только!) Понял, как превратить эту строку в лог-файл:

90000000000000000000010001 имя D0.90000000000103787900010001QF840840916070000007085814Y216254 @ D1111111111111111 \u003d 1107xxxxxxxxxxxxxxx x919MENCHIES

в этом формате:

90000000000000000000010001, имя, 840840916070000007085814Y216654, 1111111111111111,1107,919 MENCHIES

Я весь сценарий, поскольку это всего лишь один шаг в процессе превращения бревна в полезную информацию, но Heres соответствующей части.

# Автор: kinksville
# Дата: 24 апреля 2008
# Доработки: 24 апреля 2008
# Редакция: Редакция 1.00
# Другие файлы: cclookup.s, cclookup.rep
# Изменений:
# 24 апреля 2008 года: Первоначальный создания сценария.
#
# Конец изменений.

BEGIN (
FS \u003d "[\. QF \ @ D \u003d X] +"
ФУСШ \u003d ","
)
# Первой итерации из @ D поиска зачистки в с. Характер и включив ФУСШ.
/ \ @ D / # (поиска для любой строки, содержащие строку @ D
report2 \u003d "cclookup.rep2"; # Определить report2 переменной.
Доклад \u003d "cclookup.rep"; # Определить докладе переменной.
num_cclookup + +; # Получить число запросов авторизации.
Версия для печати $ 1, $ 2, $ 5, $ 6, $ 7, $ 8> доклада;
Версия для печати $ 0> report2;
) # Конец на @ D поиска.


Ключевым является тот факт, что AWK принимают регулярное выражение в виде файла разделителем. Это регулярное выражение FS \u003d "[\. QF \ @ D \u003d X] +" соответствует пространств,. QF строка, строка @ D, то \u003d, а также символ X. В + после трейлинг кронштейн является ключевым, поскольку это позволяет в течение 1 или более экземпляров какого-либо из персонажей сопровождается регулярным выражением.

Это означает, что X и XXXXXX, так как единое поле разделителя.

Я по-прежнему необходимо работать по выходным, так как теперь мне нужно обрезать имя покинуть конце последнего поля. К сожалению, этот номер в последнем поле можно в любом диапазоне от 9999999 до 1, и что это часть, которую я хочу сохранить. Может быть, в [^ 0-9] + выражения?
Old 04-25-2008
aigles's Avatar
aigles aigles is offline Forum Advisor  
Зарегистрированный пользователь
  
 

Регистрация: Apr 2004
Расположение: Бордо, Франция
Сообщения: 1429
Вы уверены, что ваше определение FS действительна для вашего требования?
Вы не определяет "@ D" и "QF" как разделители.
В caracters @, D, Q и F являются определить, как разделителей.

Действующие синтаксис:

Код:
FS  = "([[:space:]]|\\.|QF|=|x)+";

Получить последние поле без prefixing цифр:

Код:
last_field=$NF
sub(/^[0-9]*/, "", last_field);

Жан-Пьер.
Old 04-25-2008
kinksville kinksville is offline
Зарегистрированный пользователь
  
 

Регистрация: Apr 2008
Сообщений: 7
Я был немного смущает тот факт, что QF и @ D работали тоже. Я думаю потому, что [QF] + спички QQ QQQ QF QQFF т.д.

Это не так, как чистое я бы хотел, но эти персонажи всегда в том, что особое место в журнале сообщений, так что это то, что я хочу его.

Я югу в слова и посмотреть, что происходит слишком
Old 04-25-2008
kinksville kinksville is offline
Зарегистрированный пользователь
  
 

Регистрация: Apr 2008
Сообщений: 7
Нет такого счастья

Цитата:
Первоначально Послано aigles View Post
Действующие синтаксис:

Код:
FS  = "([[:space:]]|\\.|QF|=|x)+";

Цитата:
Первоначально Послано aigles View Post
Получить последние поле без prefixing цифр:

Код:
last_field=$NF
sub(/^[0-9]*/, "", last_field);

Жан-Пьер.


Ни один из этих фрагментов работала правильно для меня. ПС синтаксиса, который использовался, вероятно, изменил ряде областей, и поэтому они не все получат распечатать.

Второй фрагмент просто казалось бы добавить № 1 до последнего места т.е. (, 619MENCHIES1).

Я сыграть с ним еще и посмотреть, что происходит.
Old 04-25-2008
kinksville kinksville is offline
Зарегистрированный пользователь
  
 

Регистрация: Apr 2008
Сообщений: 7
Cool Так вот то, что мне, наконец, получили в результате я искал.


Код:
#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.

Это немного о kludge, но она работает. Я не мог, как представляется, получить last_field переменной для вывода на печать вне зависимости от того, что я сделал с помощью равниною печатать команды, которая в конце концов, почему я пошел с printf вместо. Это также позволило мне вывода результатов в десятичной форме, поскольку эти цифры до MENCHIES были долларовом выражении.

Последний раз редактировалось kinksville; на 04-25-2008 06:13 PM.. Причина: Удалено полное название от комментариев.
Closed Thread

Закладки

Теги
AWK, AWK отделкой, отделка, отделка AWK

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 02:03 AM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0