1

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

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

如何使用 awk 做到这一点。或 sed。任何帮助将不胜感激。谢谢。

4

2 回答 2

2

一种方法awk

awk '{cnt=sprintf("%06d", ++s);$1=substr($1,1,4) cnt}1' inputFile
于 2013-06-20T19:50:37.343 回答
1

尝试这样做:

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

你需要 perl 的rename,看这个

当您的测试正常时移除-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)
于 2013-06-20T18:33:43.053 回答