2016-02-18 3 views
0

Я хотел бы вывезти только людей с именем, начинающимся с A с использованием awk. Как я это сделатьСпособы поиска записей на основе их первой буквы awk Unix

REGNO NAME   DEPT   AVG    STATUS 
100  Tony   ECE    30    FAIL 
200  Jimmy   ECE    67    PASS 
300  Sanjay   CSE    89    PASS 
400  Nethra   IT    90    PASS 
500  Ramesh   MECH   45    FAIL 
600  Ranjani   CSE    34    FAIL 
700  Aarthi   IT    56    PASS 
800  Ram    MECH   98    PASS 


awk '{if($2=="A*" && $3=="IT") print $2,$3}' output.txt 


Я использовал это. Что не так?

+0

'awk '$ 2 ~/^ A/&& $ 3 ==" IT "{print $ 2, $ 3}' file' – 123

ответ

1
awk '$2 ~ "^A" && $3 == "IT" {print $2, $3}' 

Там нет соответствия шаблону, как == "A*"

1

Это будет работать для вас:

kent$ awk '$2~/^A/&&$3=="IT"{print $2,$3}' file 
Aarthi IT 

Ваша проблема, смущенный Глоб и регулярное выражение.

В awk, == не будет проверять glob, он сравнивает два значения, проверьте, равны ли они. ~ - это проверка соответствия регулярных выражений, она ожидает статическое или динамическое выражение регулярных выражений.

+0

Исправить. OP, вероятно, захочет бросить в «NR> 1», так что если/при поиске имен, начинающихся с 'N', он не соответствует строке заголовка, esp, если/когда они не добавляют второе условие на другое значение поля: 'awk '(NR> 1) && ($ 2 ~/^ A /) && ($ 3 ==" IT ") {print $ 2, $ 3}' file'. –

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