我有一个100k行的文本文件格式如下:
something/a/blablaa.jpg 0
something/a/blablab.jpg 0
something/b/blablac.jpg 0
...
somethingelse/y/blablax.jpg 99
somethingelse/z/blablay.jpg 99
somethingelse/z/blablaz.jpg 99
我想将文件名从1
开始直到100000
从第一行开始直到最后一行。这将是结果:
something/a/1.jpg 0
something/a/2.jpg 0
something/b/3.jpg 0
...
somethingelse/y/99997.jpg 99
somethingelse/z/99998.jpg 99
somethingelse/z/100000.jpg 99
答案 0 :(得分:2)
这个awk(gnu awk)单行程适用于您的示例文本:
awk '{$0=gensub("([^./]+)([.]jpg\\s)", ++i"\\2", "g",$0)}7' file
包含您的文字:
kent$ awk '{$0=gensub("([^./]+)([.]jpg\\s)", ++i"\\2", "g",$0)}7' f
something/a/1.jpg 0
something/a/2.jpg 0
something/b/3.jpg 0
somethingelse/y/4.jpg 99
somethingelse/z/5.jpg 99
somethingelse/z/6.jpg 99
答案 1 :(得分:1)
使用sed解决方案:
grep -n "." file | sed 's/\(.*\):\(.*\/\).*\(\..*\)/\2\1\3/g'
something/a/1.jpg 0
something/a/2.jpg 0
something/b/3.jpg 0
somethingelse/y/4.jpg 99
somethingelse/z/5.jpg 99
somethingelse/z/6.jpg 99
awk的另一个解决方案:
cat -n file | awk '{gsub( "/[^/]*[.]" , "/"$1"." , $2 ); print $2, $3 }'
something/a/1.jpg 0
something/a/2.jpg 0
something/b/3.jpg 0
somethingelse/y/4.jpg 99
somethingelse/z/5.jpg 99
somethingelse/z/6.jpg 99
这些解决方案适用于所有扩展(.jpg或其他)