使用awk自动文件名

时间:2013-06-20 18:28:13

标签: sed awk

我有像“FAI_4O57A”这样的文件名,它总是有三个字母后跟下划线,而不是1-7(lenght)的可变长度数字,后跟单个Alphabet。

我想提取前四个字符,然后用我自己的数字替换其他数字,如000001而不是000002等等。 (自动为文件名编号。)。

如何使用awk执行此操作。或者sed。任何帮助将不胜感激。 感谢。

2 个答案:

答案 0 :(得分:2)

awk的一种方式:

awk '{cnt=sprintf("%06d", ++s);$1=substr($1,1,4) cnt}1' inputFile

答案 1 :(得分:1)

尝试这样做:

rename -n '$c++; s/^(.{4}).*/sprintf("%s%05d", $1, $c)/e' [A-Z][A-Z][A-Z]_*

您需要perl' rename,请参阅this

当您的测试正常时(干运行模式),删除-n开关。

实施例。 :

$ ls -1
DEF_FAI_4O58A
FAI_4O57A
FTH_4O59A
box.py
index.html
robots.txt
test.html

$ rename -n '$c++; s/^(.{4}).*/sprintf("%s%04d", $1, $c)/e' [A-Z][A-Z][A-Z]_*
DEF_FAI_4O58A -> DEF_0001
FAI_4O57A -> FAI_0002
FTH_4O59A -> FTH_0003

如果您真的希望这样做:

printf '%s\n' [A-Z][A-Z][A-Z]_*  |
    awk '{c++; printf("%s%04d\n", substr($1, 0, 4), c)}' 

修改

如果您需要处理YOUR_OWN_FILE中的列:

rename -n '$c++; s/^(.{4}).*/sprintf("%s%04d", $1, $c)/e' $(awk '{print $2}' YOUR_OWN_FILE)