Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Как работать с AWK?


Автор: Leoo 29.11.2005, 00:57
Я не могу написать программу на AWK.
задание такое:

есть два файла с одинаковай структурой

например :

файл 1
Иванов Иван Иванович
Петров Петр Петрович
и т.д.

файл 2
тоже самое только другие фамилии

мне надо поменять местами четные строки
как это сделать?

Помогите плиз!

Автор: bilbobagginz 29.11.2005, 01:47
awk - простая в обращении программа. в ней есть автоматические переменные,
по ней есть море информации в сети.

awk используют либо для обработки потока с stdin и вывода на stdout (когда есть только 1 строка awk-а):

awk -F: '{ print $2; }' file.txt | grep "paoapoapoa" | wc -l
или запуская скрипт:
awk -f awk.script file.txt | grep "paoapoapoa" | wc -l



задача нe понятна: если есть n строк, то есть n/2 четных, и поменять их местами есть довольно много мозможностей [(n/2)!]...
как именно ? можно ли создавать временные файлы ? можно ли предположить одинаково-строчье ?!

пока.

Автор: comcon1 3.12.2005, 09:26
Я обычно ставлю awk конвеером вот так -- вырезка из моего скрипта:
Код

cat $1 | awk '
BEGIN {
  nuke = 0;
  puke = 0;
  print "Restricted with awk. --(om(on--.";
  print "  16.X.2005 ";
}
 {
 if ( NF == 1 ) {
  nuke = 0;
  puke = 0;
}

 if ( ( nuke == 1 ) && ( NF == 5 ) && (puke != 1) ) {
   printf "\n\n----------\n";
   puke = 1;
 }
 else
   nuke = 0;

 if ( $0 ~ "\\a*------------------------------------------------------------\\a*" )
   nuke = 1;

 if ( puke == 1)
  print $0;\

 }
 ' > $1.gwk;

Это для примера.
-- Есть блок выполняющийся вначале BEGIN {}, в конце END {}, и собственно тело {}.
-- Блок {} выполняется применительно к каждой строке.
-- Переменные определяются присваиванием, как в PHP, к примеру.
-- $1 $2 $3 ... - строка разбитая на слова. Каждое слово помещается в переменную $n.
-- NF - количество слов в слове.
-- Вся строка помещается в переменную $0.
Вот это ---
Код

 $0 ~ "\\a*------------------------------------------------------------\\a*" 

-- означает проверку на соответствие регулярному выражению.

...
Пеши есчо вопросы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)