我有像“FAI_4O57A”这样的文件名,它总是有三个字母后跟下划线,而不是1-7(长度)的可变长度数字后跟单个字母。
我想提取前四个字符,然后用我自己的数字替换其他数字,例如 000001 而不是 000002 等等。(自动编号文件名。)。
如何使用 awk 做到这一点。或 sed。任何帮助将不胜感激。谢谢。
一种方法awk
:
awk '{cnt=sprintf("%06d", ++s);$1=substr($1,1,4) cnt}1' inputFile
尝试这样做:
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
如果你真的想让awk这样做:
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)