Re: [問題] Shell script 中擷取檔案名稱的問題

看板LinuxDev作者 (小風)時間17年前 (2008/07/29 10:55), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《gero (憨)》之銘言: : 最近在做歷史資料歸檔 : 由於要匯入資料庫 : 需要在文字檔中各行的開頭加上該檔名中的日期(行數不固定 因為是依照每個月的天數決 : 定有幾行,若有30天則有30行) : 並且批次執行(因為有幾萬個檔案) : ex: File_20080725_got.txt : aa, bb, cc, dd : ee, ff, gg, hh : => : 20080725, aa, bb, cc, dd : 20080725, ee, ff, gg, hh : 有辦法做的到嗎? : 先謝謝各位大大看完我的問題了!!請幫幫我吧!! : 另外,若是沒辦法 : 節取檔名, 還有另一個可以可能可以擷取的 : 就是我的每個檔案第一行固定最右邊會有日期 : 日期跟前面的文字會以空格分開(但空格數不確定) : 這樣有辦法做到嗎? 以您提出的檔名格式(File_20080725_got.txt)為例, #!/bin/sh # 註: 搜尋目前目錄底下,以File開頭的檔案 for f in File*; do # 註: 備份原檔為 File_20080725_got.txt.bak mv $f $f.bak # 註: File_20080725_got.txt 轉成 20080725_got.txt DATE1=${f#*_} # 註: 20080725_got.txt 轉成 20080725 DATE1=${DATE1%_*} # 註: 每行的前面加入 "20080725, " 再把結果存到 File_20080725_got.txt awk '{ printf "%s, %s\n", date1, $0 }' date1=$DATE1 $f.bak > $f # 註: 刪除備份檔案 rm -f $f.bak done 另外要注意的是,以上有 Bash 限定的語法, 在別的 shell 跑可能會有問題 而且, 此例是假設您的所有檔案在同一個資料夾底下, 要遞迥處理的話, 要 另外做處理. 希望對您有所幫助 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.139.161.63

07/30 02:06, , 1F
感謝大大的幫忙!還有些問題想請教,已經寄信給您了:D
07/30 02:06, 1F
文章代碼(AID): #18ZeQABS (LinuxDev)
文章代碼(AID): #18ZeQABS (LinuxDev)