2015-06-24 26 views
-3

我有一個包含一些行的文本文件,例如書面:文本編輯器在特定字段編輯的如下所示

hbcdefgg001asdfn  
hasezahg002ehea  
jasehaah003dcdn  
abcdefgh006ahdh 

的線遵循一組的格式,所以例如:

  1. 前8個字符需要是字母
  2. 然後在接下來的3個字符的量,
  3. 接着進行4字母代碼。

最後一行包含總計最後一行的數量。我現在需要以編程方式複製前3行,例如10次,並用新的總金額重新輸入最後一行。

我想知道你認爲最好的方法來操縱每一行?每個字母/數量/代碼的位置是固定的。

+0

什麼將是最後一行的格式?總共不會超過您所擁有的3個字符限制嗎? – KDM

+0

行之間是否有空行?在您的輸入中,職位*不是*固定的。 –

+0

Hi @KDM,是的,如果你超過了999的總數。實際上這個文件比較複雜,但我只列舉了一個簡單的例子。假設我必須複製10次,金額不會超過999,然後:) – Dragonfly

回答

0

使用外殼工具:seqheadcutawktail,和sed

輸入文件:

$ cat so.txt 
hbcdefgX001asdfn 
hasezahX002ehea 
jasehaah003dcdn 
abcdefgh006ahdh 

打印的前三行1000次:

$ for i in $(seq 1000) 
do 
    head -3 so.txt >> so-long.txt 
done 

計算的總和:

$ sum=$(cut -b9-11 < so-long.txt | awk '{sum += $1}; END {print sum}') 

更換總和的最後一行,並追加它到輸出:

$ tail -1 so.txt | sed "s/^\(........\)\(...\)/\1${sum}/" >> so-long.txt 

現在so-long.txt包含6000線,在過去五年之中:

$ tail -5 so-long.txt 
jasehaah003dcdn 
hbcdefgX001asdfn 
hasezahX002ehea 
jasehaah003dcdn 
abcdefgh6000ahdh