2017-02-20 28 views
0

У меня есть файл test.txt, который содержит ниже данные внутри файла.Как искать строку с помощью UNIX

Cat test.txt 
BG BEGIN BS JOB 
OPERATOR: BICJobname 
Select EMP_NAME ,salary,dep_name from EMP_Table Where DEP_ID=101 
END BS JOB 
BG BEGIN BS JOB 
OPERATOR: BICJobname1 
Select EMP_NAME ,salary from EMP_Table1 Where DEP_ID=102 
END BS JOB 
BG BEGIN BS JOB 
OPERATOR: BICJobname3 
Select EMP_NAME from EMP_Table2 Where DEP_ID=102 
END BS JOB 
BG BEGIN BS JOB 
OPERATOR: BICJobname5 
Select EMP_NAME,Date_Of_Joining,Salary from EMP_Table3 Where DEP_ID=101 
END BS JOB 
BG BEGIN BS JOB 
OPERATOR: BICJobname6 
Select EMP_NAME,Date_Of_Joining,Salary from EMP_Table3 Where DEP_ID=101 
END BS JOB 

Мой вопрос: - Если я искал имя столбца (строки) в качестве заработной платы в указанном файле мне нужно получить имя задания, которое оказывает fileds зарплаты.

о/р

Job Name 
BICJobname1 salary 
BICJobname3  No 
BICJobname5 Salary 
BICJobname6 Salary 
+0

Сделайте это с помощью 'awk'. Когда вы читаете строку «ОПЕРАТОР:», введите второе слово в переменную, затем прочитайте следующую строку и проверьте, содержит ли она «зарплату». – Barmar

+0

yup ..i может достичь этого через awk ..how search in loop для следующего раза, я запутался там .. Я не получаю, как цикл для каждого начала и конца работы и собирать информацию. – user2466009

+0

Просто используйте '/OPERATOR:/'повторять строки оператора. Затем используйте 'getline' для чтения следующей строки. – Barmar

ответ

0

Вы можете объединить Grep и вырезать команд изолировать строки, содержащие «Зарплата», а затем выбрать только имя задания.

Представьте, что у вас есть выход

o/p 
Job Name 
BICJobname1 salary 
BICJobname3  No 
BICJobname5 Salary 
BICJobname6 Salary 

в файле output.txt. Вы можете запустить:

grep -i salary output.txt | cut -d ' ' -f1 

Для получения:

BICJobname1 
BICJobname5 
BICJobname6 
+0

спасибо и как насчет зарплатных полей. Как достичь этой части – user2466009

+0

Он спрашивает, как создать первый вывод с 'зарплатой' и' no' из исходного входного файла с 'OPERATOR: BIGJobname'. – Barmar

1

Используйте awk, чтобы соответствовать OPERATOR: линии, а затем прочитать следующую строку с getline, чтобы увидеть, если он имеет зарплату или нет.

awk '/OPERATOR:/ { job = $2; getline; 
        if (tolower($0) ~ /salary/) sal = "Salary"; else sal = "No"; 
        print job, sal }'