用count替换字符串

时间:2016-03-24 21:40:28

标签: bash text awk replace sed

我有一个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

2 个答案:

答案 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或其他)