如何使用UNIX搜索字符串

时间:2017-02-20 13:18:36

标签: bash shell unix

我有test.txt文件,其中包含文件中的以下数据。

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

我的问题: - 如果我在上面的文件中搜索了列名(字符串作为工资),我需要获得具有工资文件的作业名称。

O / P

Job Name
BICJobname1    salary
BICJobname3     No
BICJobname5    Salary
BICJobname6    Salary

2 个答案:

答案 0 :(得分:1)

使用awk匹配OPERATOR:行,然后使用getline阅读下一行,看看它是否有薪水。

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

答案 1 :(得分:0)

您可以结合 grep 剪切命令来隔离包含“Salary”的行,然后仅选择作业的名称。

想象一下,你有输出

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