2015-02-20 1 views
1
рисунка на непосредственно относится

у меня есть такие строки:AWK получить

Volume.Free_IBM_LUN59_28D:  2072083693568 

Я хотел бы получить только IBM_LUN59_28D от этой линии, используя AWK.

Благодаря

ответ

1

Вы можете использовать sub делать замены на каждой входной линии, в соответствии со следующим стенограмме:

pax> echo 'Volume.Free_IBM_LUN59_28D:  2072083693568' | awk ' 
...> { 
...>  sub (".*Free_", ""); 
...>  sub (":.*", ""); 
...>  print 
...> }' 
IBM_LUN59_28D 

Эта команда пересекает несколько строк для удобства чтения, но, если вы работаете на файл и не слишком обеспокоены читаемости, вы можете просто использовать сжатую версию:

awk '{sub(".*Free_","");sub(":.*","");print}' inputFile 

Если вы поддаетесь непредставленными awk решения, вы можете также использовать sed:

sed -e 's/.*Free_//' -e 's/:.*//' inputFile 

Обратите внимание, что оба эти решения основываются на ваших (несколько разреженных) тестовых данных. Если ваше определение «как» содержит предшествующие текстовые сегменты другое, чем Free_ или последующие символы прочее, чем :, может потребоваться дополнительная работа.

Например, если вы хотите строку между первым _ и первым :, вы можете использовать:

awk '{sub("[^_]*_","");sub(":.*","");print}' 
0

С СЭД:

sed 's/[^_]*_\(.*\):.*/\1/' 

Искать последовательности, не _ символы следуют _ (это будет соответствовать Volume.Free_), затем другая последовательность символов (это будет соответствовать IBM_LUN59_28D, мы группируем это для f uture), затем следуют : и любая последовательность символов. Замените сохраненным рисунком (\1). Вот и все.

Пример:

$ echo "Volume.Free_IBM_LUN59_28D:  2072083693568" | sed 's/[^_]*_\(.*\):.*/\1/' 
IBM_LUN59_28D 
0

Вот один awk

awk -F"Free_" 'NF>1{split($2,a,":");print a[1]}' 

EKS:

echo "Volume.Free_IBM_LUN59_28D:  2072083693568" | awk -F"Free_" 'NF>1{split($2,a,":");print a[1]}' 
IBM_LUN59_28D 

Он делит линию Free_.
Если линия, то есть более чем одно поле NF>1 затем:
Split второго поля свиданья : и напечатать первую часть a[1]

0

С AWK:

echo "$val" | awk -F: '{print $1}' | awk -F. '{print $2}' | awk '{print substr($0,6)}' 

где данная строка находится в $ Вале.

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