作者 主題: find 與 cut 組合 如何存回結果?  (閱讀 1594 次)

0 會員 與 1 訪客 正在閱讀本文。

lother

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
find 與 cut 組合 如何存回結果?
« 於: 2013-12-23 13:37 »
各位大大好
我的問題是需要找出大量的大檔案 
進行欄位切割並存回去

我使用下列find 與 cut 組合的指令
代碼: [選擇]
find . -name *.ftm -exec cut -b1-2,3-4,5-6,7-14,15-20,21-26,27,28,29,30,31,32,33,34-39,40-47,48-53,54-61,62-67,68-75,76-81,82-89,90-95,96-103,104-109,110-117,118-123,124-131,132-137,138-145,146-151,152-159,160-165,166-173,174-179,180-187 --output-delimiter=','  '{}' \;
可以找出我需要修改的檔案並切割好欄位
但是要如何把資料存回去呢?

資料範例
代碼: [選擇]
010601       204191 0900000330000                  15      80    10      99     2      99                                33      20    35      20    40      30
010601       304250 0900000110100                   1      12                                                            19      50
010601       404289 0900000210000                  80      10    73       5                                             135      10



原先使用notepad++套用正規表示法處理 
代碼: [選擇]
(\d{2})(\d{2})(\d{2})([ 0-9]{8})(.{6})(\d{6})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})([ 0-9]{6})([ 0-9]{8})
取代為
代碼: [選擇]
$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35
但它沒辦法處理200M以上的檔案...


改使用sed  但sed沒辦法切割出這麼多欄位...

或者說還有其他更適合的工具呢?

謝謝

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1378
    • 檢視個人資料
    • http://darkranger.no-ip.org
Re: find 與 cut 組合 如何存回結果?
« 回覆 #1 於: 2013-12-23 14:17 »
看不太懂樓主的狀況...
不過對於比較複雜的文字檔控制,可能挑一個慣用的程式語言來做會比較好一點

lother

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
Re: find 與 cut 組合 如何存回結果?
« 回覆 #2 於: 2013-12-23 15:34 »
感謝回復!

剛剛用find搭配perl解掉了!

代碼: [選擇]
find ./ -type f -name '*.ftm' -exec perl -i -pe 's/([0-9]{2})([0-9]{2})([0-9]{2})([ 0-9]{8})(.{6})([0-9]{6})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})(?:\r\n|([ 0-9]{6})([ 0-9]{8})\r\n)))))))))))$/$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35\n/gi' "{}" \;

因為檔案太大  想找個比較好的方式來處理他....