Соединить два awk сценария

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Grih65kop
Сообщения: 145

Соединить два awk сценария

Сообщение Grih65kop »

Из файла необходимо (при помощи awk) выбрать строки в которых больше 4 символов, а затем обрезать строки длиней 4 символ до 4 символьных.

file

Код: Выделить всё

012345678
12
32146544
123
879484121


Делаю так:
awk 'length > 4' file >file2
awk '{print substr($0,0,5)}' file2

Все работает, но не могу понять как эти два awk сценария можно соединить в один, и почему мы должны указывать 5, а не 4.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Соединить два awk сценария

Сообщение SLEDopit »

Код: Выделить всё

awk 'length>4{print substr($0,0,5)}' file


Код: Выделить всё

sed -n '/[0-9]\{4\}\+/{s/\([0-9]\{4\}\).*/\1/;p}' file
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Соединить два awk сценария

Сообщение Grih65kop »

Спасибо.
А с чем связано столь странное назначение "5" вместо "4"?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Соединить два awk сценария

Сообщение SLEDopit »

Grih65kop писал(а):
08.08.2012 19:39
А с чем связано столь странное назначение "5" вместо "4"?
С тем что у вас используется mawk.
mawk в отличии от nawk/gawk первый символ считает не нулевым, а первым, поэтому нужно указывать

Код: Выделить всё

mawk 'length>4{print substr($0,1,4)}' file

В случае с nawk и gawk работает

Код: Выделить всё

awk 'length>4{print substr($0,0,4)}' file
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: