2017-02-20 105 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 

我的問題: - 如果我在上面的文件中搜索列名(字符串作爲工資),我需要得到有薪水文件的工作名稱。

O/P

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

使用'awk'做它。當你讀到'OPERATOR:'行時,將第二個單詞寫入一個變量,然後讀取下一行並測試它是否包含'salary'。 – Barmar

+0

y ..我可以通過awk ..實現這一點..如何搜索循環下一次我很困惑那裏..我沒有得到如何循環每個開始和結束的工作和收集信息.. – 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

謝謝,怎麼樣薪水fields..how實現那部分 – user2466009

+0

他問的是如何用'OPERATOR:BIGJobname'在原始輸入文件中用'salary'和'no'創建第一個輸出。 – Barmar

1

使用awkOPERATOR:線匹配,然後讀取下一行與getline,看它是否有薪與否。

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