2011-05-18 42 views
1

我有一個文件,該文件包含以下日誌有時它改變了,但部分總是有文件。我要提取的文件名稱,最多爲.xlslinux字符串操作

cat /pretupsvar/pretups_weblogs/DirectPayOutErrorLog.log | awk '{print $10}'| sed 's/]//g' 

當文件名不是空間是好的顯示像下面的日誌

userList1305631236859_AS_ALL_DIST_ALL_ETOPUP_1305631236859.xls 

文件,但在文件名中包含一定的空間,它取到那個空間像

userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week 

但在PB的情況下,我需要在適當的格式,文件名..

是否有此

我想這個輸出空間的情況下::任何解決方案

userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ \one\ \payout.xls 

,這樣我可以移動文件到另一個位置。如果它不包含空格,那麼它只會將文件名稱提供給.xls。

Logs are :::::::::::::::::::::::: 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9854798391] [FILE NAME: userList1305631236859_AS_ALL_DIST_ALL_ETOPUP_1305631236859.xls] [MESSAGE: User not active] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9854803938] [FILE NAME: userList1305631236859_AS_ALL_DIST_ALL_ETOPUP_1305631236859.xls] [MESSAGE: No channel user exist by this mobile number] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9803493705] [FILE NAME: userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week one payout.xls] [MESSAGE: user does not belong to specified domain] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9803493706] [FILE NAME: userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week one payout.xls] [MESSAGE: user does not belong to specified domain] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9803493707] [FILE NAME: userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week one payout.xls] [MESSAGE: user does not belong to specified domain] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9803590276] [FILE NAME: userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week one payout.xls] [MESSAGE: user does not belong to specified domain] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9803590277] [FILE NAME: userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week one payout.xls] [MESSAGE: user does not belong to specified domain] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9803590802] [FILE NAME: userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week one payout.xls] [MESSAGE: user does not belong to specified domain] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: NA] [FILE NAME: userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week one payout.xls] [MESSAGE: SQL Exception:Invalid column index] 
INFO [main] (DirectPayOutErrorLog.java:113) - :: [MSISDN: 9803594351] [FILE NAME: userList1305647896930_PB_PBZONE_DLMP_RLMP_ETOPUP_Week one payout.xls] [MESSAGE: user does not belong to specified domain] 

請幫

回答

0

試試這個:

sed -n -e 's/.*\[FILE NAME: \([^]]*\)].*/\1/p' /pretupsvar/pretups_weblogs/DirectPayOutErrorLog.log 

它不應該是必要的「手動」逃脫的空間,只要你正確地引用變量用來保存文件每次使用它時命名(假設你正在談論一個shell腳本)。

如果要採取行動的每次出現的每個文件名,你可以做這樣的事情:

INPUT_FILE=/pretupsvar/pretups_weblogs/DirectPayOutErrorLog.log 
sed -n -e 's/.*\[FILE NAME: \([^]]*\)].*/\1/p' $INPUT_FILE | while read file ; do 
    mv "$file" $SOME_DESTINATION 
done 

如果你只想立刻行動上的每一個文件,你可以方便地添加sort -u到這個管:

sed -n -e 's/.*\[FILE NAME: \([^]]*\)].*/\1/p' $INPUT_FILE | sort -u | while read file ; do 
    // do stuff with "$file" 
done 
+0

感謝您的支持,但如果我托盤移動此文件,然後仇敵PB案件我做什麼。它需要的空間.. userList1305631236859_AS_ALL_DIST_ALL_ETOPUP_1305631236859.xls userList1305647866843_PB_PBZONE_DLMP_RLMP_ETOPUP_Week一個payout.xls userList1305647896930_PB_PBZONE_DLMP_RLMP_ETOPUP_Week一個payout.xls我如何才能將使用此文件名 – 2011-05-18 13:30:45

+0

@Sunil的porticular,如果你的意思是移動的文件與'mv',那麼你只需要用引號包圍文件名,它將被視爲一個名稱。 – pavium 2011-05-18 13:37:38

+0

@Sunil:我發佈的代碼也適用於包含空格的文件,試試吧。 – 2011-05-18 13:51:31

0

一種不同的方法:

$ cut -s -f12,13,14 -d " " --output-delimiter='\ ' log | sed 's#\].*$##' 

userList1305631236859_AS_ALL_DIST_ALL_ETOPUP_1305631236859.xls 
userList1305631236859_AS_ALL_DIST_ALL_ETOPUP_1305631236859.xls 
userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ one\ payout.xls 
userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ one\ payout.xls 
userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ one\ payout.xls 
userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ one\ payout.xls 
userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ one\ payout.xls 
userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ one\ payout.xls 
userList1305647880920_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ one\ payout.xls 
userList1305647896930_PB_PBZONE_DLMP_RLMP_ETOPUP_Week\ one\ payout.xls 
0

如果filenam ES不包含 ']',這是所有你需要:

sed 's/.*FILE NAME: //;s/].*//;s/ /\\ /g' logfile 

] [MESSAGE:否則搜索。