2015-09-21 11 views
-1

我有一個要求像文件1有一些員工詳細信息,如下面比賽2列在同一文件並退出零,如果匹配其他進行的Unix

EMPID,empname,empdaddress,empsupervisor

1234,xxx,street1,6666 
2345,yyy,street2,6666 
3456,uuu,street3,2345 
4567,ppp,street4,9999 
9999,kkk,street5,7777 

現在,我必須將empsupervisor列值與empid進行匹配,以瞭解empsupervisor的詳細信息是否也存在於file1中。 在文件示例中,2345是empsupervisor,其詳細信息存在於文件中。 9999相同。但6666 emp細節不在文件中。

我必須檢查文件1中是否有詳細信息,然後檢查另一條記錄,否則在完成搜索時退出0。 我是新來的unix腳本。任何建議非常感謝。 感謝

我已經試過

awk 'FNR==NR {h[$1] = $11; next} 
($1 in h) { 
    print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$15,'U' 
}' file2 file1 >newfile 
+0

'awk'FNR == NR {h [$ 1] = $ 11;下一個}($ 1 h){print $ 1,$ 2,$ 3,$ 4,$ 5,$ 6,$ 7,$ 8,$ 9,$ 10,$ 11,$ 12,$ 13,$ 15,'U'}'file2 file1> newfile ... this當我們有2個文件時可以匹配。我想在單個文件中執行操作。 – Suman

+2

它必須是awk嗎?你可以給一個'file2'樣本和所需的輸出嗎? – Sobrique

+0

爲什麼不使用python或ruby等更高級的語言?或者將記錄存儲在數據庫中? –

回答

0

這應該工作,其中EMP是文件名。

comm -23 <(cut -d, -f4 emp | sort -u) <(cut -d, -f1 emp | sort -u) 

會給你

6666 
7777 

目前尚不清楚你想要的結果和其他文件做什麼。

上面的代碼可以使用函數重寫。

p() { cut -d, -f"$1" emp | sort -u; }; comm -23 <(p 4) <(p 1) 
+0

是的,它的工作原理..謝謝 – Suman

相關問題