2014-12-10 2 views
2

Я хочу использовать строку (BIRCH) в качестве разделителя полей в awk для печати второго поля. Я пытаюсь следующую команду:Использование многосимвольного разделителя полей в awk на Solaris

cat tmp.log|awk -FBirch '{ print $2}' 

Ниже выход становится распечатанный:

irch2014/06/23,04: 36: 45,3,1401503, XML-Харлан, P12345-1, температура, 0a653356353635635, темп, L, Успех

Желаемый выход:

2014/06/23,04: 36: 45,3,1401503, XML-Харлан, P12345-1, темп, 0a65335635363 5635, темп, L, Успех

Содержание tmp.log файла.

-bash-3.2# cat tmp.log 
Dec 05 13:49:23 [x.x.x.x.180.100] business-log-dev/int [TEST][0x80000001][business-log][info] mpgw(Test): trans(8497187)[request][10.x.x.x]: 
Birch2014/06/23,04:36:45,3,1401503,xml-harlan,P12345-1,temp,0a653356353635635,temp,L,Success 

Я что-то не так?

  • OS: Solaris10
  • Shell: Bash

Пробовал ниже команды предлагается в одном из приведенных ниже ansers. Я получаю желаемый результат, но с дополнительной пустой строкой вверху. Как это можно исключить из вывода?

-bash-3.2# /usr/xpg4/bin/awk -FBirch '{print $2}' tmp.log

2014/06/23,04:36:45,3,1401503,xml-harlan,P12345-1,temp,0a653356353635635,temp,L,Success

+0

Если у вас есть только два поля, как о 'SED 's /.* Береза ​​//' File'? – tripleee

ответ

2

Первоначально, я предложил поставить кавычки "Березка" (-F'Birch'), но на самом деле, я не думаю, что следует делать какие-либо различия.

У меня совсем нет опыта работы с Solaris, но вы можете также попробовать использовать nawk («новый awk») вместо awk.

nawk -FBirch '{print $2}' file 

Если это работает, вы можете рассмотреть вопрос о создании псевдонима, так что вы всегда использовать новую версию AWK с более широкими возможностями.

Вы также можете попробовать использовать версию AWK в /usr/xpg4/bin каталоге, который является реализация соответствует POSIX поэтому должен поддерживать многосимвольный FS:

/usr/xpg4/bin/awk -FBirch '{print $2}' file 

Если вы хотите напечатать строки, в которых более чем одной области, вы можете добавить условие:

/usr/xpg4/bin/awk -FBirch 'NF>1{print $2}' file 

Это печатает только второе поле, когда есть больше чем одно поле.

+1

Solaris awk принимает только один символ, как FS –

+0

@TomFenech, он работает как шарм, спасибо :) – user2607367

+1

@ Да, честно говоря, я только гадал с блоком BEGIN. Я отредактировал его из моего ответа. –

1

От человека странице AWK по умолчанию на солярисе usr/bin/awk

-Fc   Uses the character c as the field separator 
       (FS) character. See the discussion of FS 
       below. 

Как вы можете видеть Солярис AWK только принимает один символ в качестве разделителя полей

Также на странице человека расщепляется

split(s, a, fs) 

    Split the string s into array elements a[1], a[2], ... 
    a[n], and returns n. The separation is done with the 
    regular expression fs or with the field separator FS if 
    fs is not given. 

Как вы можете видеть здесь, в качестве разделителя требуется регулярное выражение, чтобы мы могли использовать.

awk 'split($0,a,"Birch"){print a[2]}' file 

Для печати второй раскола поля по Birch

+0

Я получаю ниже ошибки, когда использую эту команду. 'awk: ошибка синтаксиса рядом с строкой 1 awk: спасение рядом с строкой 1' – user2607367

+1

Чтобы быть понятным, нет такой вещи, как' Solaris awk'. Solaris является платформой, предоставляемой Sun, которая поставляется с тремя различными версиями awk -/usr/bin/awk (aka 'oawk' или« старый, сломанный awk »), nawk (« новый awk ») и/usr/xpg4/бен/AWK. Каждый раз, когда вы получаете сообщение об ошибке 'awk: синтаксическая ошибка около строки 1 awk: спасение рядом с строкой 1, значит, вы используете старый сломанный awk. Не делайте этого, используйте один из других. –

+0

@EdMorton Я имел в виду по умолчанию на solaris (который является/usr/bin/awk), возможно, возможно, был более ясным, хотя –

Смежные вопросы