作者phterry (小风)
看板LinuxDev
标题Re: [问题] Shell script 中撷取档案名称的问题
时间Tue Jul 29 10:55:05 2008
※ 引述《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
1F:推 gero:感谢大大的帮忙!还有些问题想请教,已经寄信给您了:D 07/30 02:06