我有像“FAI_4O57A”这样的文件名,它总是有三个字母后跟下划线,而不是1-7(lenght)的可变长度数字,后跟单个Alphabet。
我想提取前四个字符,然后用我自己的数字替换其他数字,如000001而不是000002等等。 (自动为文件名编号。)。
如何使用awk执行此操作。或者sed。任何帮助将不胜感激。 感谢。
答案 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
如果您真的希望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)