2014-09-16 3 views
2

Здесь columns.txtAwk подстроки один символ

aaa bbb 3 
ccc ddd 2 
eee fff 1 
3 3 g 
3 hhh i 
jjj 3 kkk 
ll 3 mm 
nn oo 3 

я могу найти строку, в которой второй столбец начинается с «Ъ»:

awk '{if(substr($2,1,1)=="b") {print $0}}' columns.txt 

я могу найти строку, где начинается второй столбец с «бб»:

awk '{if(substr($2,1,2)=="bb") {print $0}}' columns.txt 

почему о, почему я не могу найти строку, где второй символ во втором столбце является «б» ?:

awk '{if(substr($2,2,2)=="b") {print $0}}' columns.txt 

awk -W version == GNU Awk 3.1.8

+0

потому что вы говорите 'substr()', чтобы возвращать 2 символа (последний аргумент), а затем сравнивая полученную строку 2-char (например, 'bb') с строкой 1-char' b', чтобы увидеть, идентичны, что, конечно, никогда не может быть. –

+0

Я использую эту функцию как substr (field, start, end), где end - N-й символ строки. Он работал до сих пор, потому что я всегда искал от первого персонажа. – AWE

ответ

4

Вы можете использовать:

awk 'substr($2,2,1) == "b"' columns.txt 
aaa bbb 3 
  1. substr function's 3rd argument является длина строки.
  2. print - действие по умолчанию в awk.
+1

Да, я имел в виду только третий аргумент. Спасибо @EdMorton. – anubhava

3

awk '$2 ~ /^.b/' columns.txt также будет работать.

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