2017-04-25 25 views
0

想知道是否有人可以用grep或awk幫助我。我有2個文件,第一個包含學生ID和第二包含涉及到每個學生使用grep或awk進行文本處理

文件1(oldstudent.txt)

5678D956 
    45S87954 
    56898K78 
    4D856898 
    556987F8 
    23657D87 

文件2(app_path.config)

配置文件
/export/home/5678D956/Scripts 
    /export/home/5678D956/FTP 
    /export/home/5678D956/HomeDirs 
    /export/home/4487984D/Scripts 
    /export/home/4487984D/FTP 
    /export/home/4487984D/HomeDirs  
    /export/home/45S87954/Scripts 
    /export/home/45S87954/FTP 
    /export/home/45S87954/HomeDirs  
    /export/home/56898K78/Scripts 
    /export/home/56898K78/FTP 
    /export/home/56898K78/HomeDirs 
    /export/home/909878S4/Scripts 
    /export/home/909878S4/FTP 
    /export/home/909878S4/HomeDirs 

我想擁有它,這樣,如果在文件1存在一個學生,它註釋掉它們的配置設置,並保存爲文件3(app_path_new.config)

#/export/home/5678D956/Scripts 
    #/export/home/5678D956/FTP 
    #/export/home/5678D956/HomeDirs 
    /export/home/4487984D/Scripts 
    /export/home/4487984D/FTP 
    /export/home/4487984D/HomeDirs  
    #/export/home/45S87954/Scripts 
    #/export/home/45S87954/FTP 
    #/export/home/45S87954/HomeDirs  
    #/export/home/56898K78/Scripts 
    #/export/home/56898K78/FTP 
    #/export/home/56898K78/HomeDirs 
    /export/home/909878S4/Scripts 
    /export/home/909878S4/FTP 
    /export/home/909878S4/HomeDirs 

我一直在嘗試使用grep,sed和awk,並且似乎沒有去任何地方。

感謝

+0

你能分享您使用的命令? – jraynal

+0

對於它的價值,'grep -vf file1 file2'將刪除文件2中與文件1中的行匹配的所有行。因此,如果您容忍刪除行而不是將它們註釋掉,那麼就有一個grep解決方案。 – stevesliva

+2

難以挑選重複,因爲有這麼多... – 123

回答

0

AWK方法:

awk 'NR==FNR{a[$1]; next}{if($4 in a) $1="#"$1;}1' OFS="/" oldstudent.txt FS="/" app_path.config 

輸出:

#/export/home/5678D956/Scripts 
#/export/home/5678D956/FTP 
#/export/home/5678D956/HomeDirs 
/export/home/4487984D/Scripts 
/export/home/4487984D/FTP 
/export/home/4487984D/HomeDirs  
#/export/home/45S87954/Scripts 
#/export/home/45S87954/FTP 
#/export/home/45S87954/HomeDirs  
#/export/home/56898K78/Scripts 
#/export/home/56898K78/FTP 
#/export/home/56898K78/HomeDirs 
/export/home/909878S4/Scripts 
/export/home/909878S4/FTP 
/export/home/909878S4/HomeDirs 

將輸出重定向到新的文件中添加以下上述命令的末尾:

> app_path_new.config 
-2

你可以用while循環做到這一點和sed:

cp app_path.config app_path_new.config 
cat oldstudent.txt | 
    while read line 
    do 
     sed -i "[email protected]*/$line/.*@# &@g" app_path_new.config 
    done 
+0

哇..工程就像一個魅力。需要學習sed我自己,因爲它看起來非常強大。非常感謝您 – tom1123

-2
cp app_path.conf app_path_new.conf 
for id in `cat oldstudent.txt`; do sed -i '/'$id'/[email protected]^@#@' app_path_new.conf; done 
+0

非常感謝您花時間幫忙。奇蹟般有效 – tom1123