2015-03-31 28 views
0

2個文件(的fileA,FILEB)在Linux中添加新的值到文件內容

FILEA

015638|00001059 
015639|00001059 
015640|00001059 
015644|00001158 
015645|00005795 
015646|00000721 
015648|00003804 
015649|00005795 

FILEB

05052015 

(注:最後一個值就是今天的日期)

015638|00001059|05052015|03312015 
015639|00001059|05052015|03312015 
015640|00001059|05052015|03312015 
015644|00001158|05052015|03312015 
015645|00005795|05052015|03312015 
015646|00000721|05052015|03312015 
015648|00003804|05052015|03312015 
015649|00005795|05052015|03312015 

我有一個代碼,它的工作原理,但有點驚訝,爲什麼有一個。 $(在sed語句中)讓它工作。

sed "s/.$/|$(cat FileB)|$(date +"%m%d%Y")/" FileA 

任何人都可以解釋爲什麼它的工作?除了sed語句之外,我也接受其他解決方案。謝謝

回答

0

正如在其他答覆中指出,它無法正常工作,因爲它是除去每行的最後一個字符在FileA中。

但是,移除.會得到你想要的結果:

sed "s/$/|$(cat FileB)|$(date +"%m%d%Y")/" FileA 

也就是說,隨着FileB內容替換line end$)(文件只包含1號線)和date通過|分隔。

+0

謝謝。這就是我認爲正確的代碼應該是。文件A在調查時有一些不可打印的字符。 – user2008558 2015-04-02 02:27:55

0

任何人都可以解釋爲什麼它的工作?

我沒有工作。這點(.)的最後一個字符相匹配,併爲您更換,該角色將被刪除:

015638|0000105|05052015|03312015 
015639|0000105|05052015|03312015 
... 
       ^oops 
+0

true如果最後一個字符是你所看到的(例如不是空格字符),但不是sur,(複製的)樣本不能在這種觀點上是安全的,除非作者特別說明。 – NeronLeVelu 2015-04-01 05:53:31

0
sed "s/[^0-9]*$/|$(head -1 FileB)|$(date +"%m%d%Y")/" FileA 

也許是更安全,在此代碼,你趕上 的方式 - 刪除任何非數字最後一個字符(空格,製表,...) - 以1行FILEB的(避免erroneuous多),但是它是唯一的,尤其是如果你通過自己創建文件來確保單聲道線路

+0

感謝您的精彩解決方案 – user2008558 2015-04-02 02:26:06

相關問題