- сюрприз awk, gpl77, 18:45 , 12-Мрт-12 (1)
> cat 1.list | awk 'FS="=" { print $1 }' > Почему не обрабатывает первую строчку? Как это сделать?У меня не получилось воспроизвести :-) awk version 20091126 (FreeBSD) попробуйте так cat 1.list | awk 'BEGIN {FS="="} \ {print $2}' или так cat 1.list | awk -F = '{print $2}' может еще шелл ваш кавычки отъедает
- сюрприз awk, KarD_IO, 19:23 , 12-Мрт-12 (3)
FreeBSD 7.2 awk version 20070501 (FreeBSD)> попробуйте так > cat 1.list | awk 'BEGIN {FS="="} \ > {print $2}' сработало как нужно > или так > cat 1.list | awk -F = '{print $2}'
сработало как нужно > может еще шелл ваш кавычки отъедает
пробовал другой - нет т.е. конструкция awk 'FS="=" { print $2 }' должна быть записана как 'BEGIN {FS="=" { print $2 }' Спасибо.
- сюрприз awk, KarD_IO, 19:27 , 12-Мрт-12 (5)
Сорри, так:'BEGIN {FS="="} { print $2 }'
- сюрприз awk, gpl77, 20:02 , 12-Мрт-12 (6)
> Сорри, так: > 'BEGIN {FS="="} { print $2 }' правильнее так: 'BEGIN {FS="="} \ { print $2 }' шаблон {действие} второй шаблон пустой
- сюрприз awk, Pahanivo, 19:01 , 12-Мрт-12 (2)
> Почему не обрабатывает первую строчку? Как это сделать?твой вывод вообще от балды придуман походу ...
- сюрприз awk, KarD_IO, 19:24 , 12-Мрт-12 (4)
>> Почему не обрабатывает первую строчку? Как это сделать? > твой вывод вообще от балды придуман походу ...Вывод реальный, не стал бы задавать вопроса. А данные, да - фейк :)
- сюрприз awk, Pahanivo, 07:23 , 13-Мрт-12 (8)
> А данные, да - фейк :) как в выводе получилось что и первое и второе поля по отдельности на выходе дают 2 3 4
- сюрприз awk, Andrey Mitrofanov, 10:18 , 13-Мрт-12 (9)
>> А данные, да - фейк :) > как в выводе получилось что иНу, поскольку твоё сообщение #8 "вышло" несколько позже ##1,3,5 и 6, объясняю: В awk 'FS="=" { print $1 }' _присваивание_ FS="=" стоит на месте и выполняет функцию _условия перед блоком исполняемого кода в скобках {}. При обработке первой строки (перед~) FS имеет "стандартное значение", первая строка разбивается на поля по пробелам, пробелов в ней нет, вся строка попадает в $1. После обработки первой строки FS присвоено_новое значение, вторая и далее строки будут разбиваться на поля по-другому. "Условие" блока всегда истинно, блок выполняется для каждой строки. Итого: пример с print$1 печатает первую строку целиком, вторую и далее - только то, что после =. Аналогичный код в Си - if(var=value){...} - считается "традиционной" ошибкой и обычно вызывает предупреждения при компиляции современными компиляторами. PS: И кстати, да вывод в исходном сообщении команды с print$1 - фейк, точнее, видимо, ошибка копи-пасты.
- сюрприз awk, Andrey Mitrofanov, 10:21 , 13-Мрт-12 (10)
> Итого: пример с print$1 печатает первую строку целиком, вторую и далее - > только то, что после =...., что до =. //fix, загляделся на---vv > фейк, точнее, видимо, ошибка копи-пасты.
- сюрприз awk, Pahanivo, 17:57 , 13-Мрт-12 (11)
>> фейк, точнее, видимо, ошибка копи-пасты.наконецта ))
- сюрприз awk, LSTemp, 03:14 , 13-Мрт-12 (7)
>[оверквотинг удален] > 2 > 3 > 4 > делаем так > cat 1.list | awk 'FS="=" { print $2 }' > Вывод > 2 > 3 > 4 > Почему не обрабатывает первую строчку? Как это сделать?[root@local 333]# cat 1.txt 0=1 1=2 2=3 3=4 [root@local 333]# cat c.bsh #!/bin/bash cat 1.txt | awk -v FS="=" '{ print $1 }' [root@local 333]# ./c.bsh 0 1 2 3 PS как факт - обычно для шелл все что в двойных кавычках (") = интерпритируемое выражение. поэтому: - иногда необходимо экранирование символов - когда экранирование практически не возможно при использовании определенной команды (в силу использования этой командой тех же управляющих символов, что и у шелла), следует использовать опций этой самой команды (они обязательно есть - не дураки делали) дабы отделить мухи от котлет. man Вам в помощь :) PSS фfктически FS=field_separator - это только переменная, устанавливаемая на время выполнения скрипта awk. отсюда легко идет -v FS="=", как следует из man PSSS begin - тоже правильно, но ИМХО для скрипта из одной команды совершенно лишнее.
|