我在linux环境中工作,我希望得到一些关于bash脚本的帮助,以减少简单的重复。
我有很长的文件名列表(确切地说是937)。在一行中的该文件中,只有一个文件名,因此,文件中总共有937行。
我想在文件名前面添加某些文字,然后按顺序在文件名后添加数字。
所以我想在文本文件中使用这样的东西。
aa.exe
bb.exe
cc.exe
到
asd aa.exe 1
asd bb.exe 2
asd cc.exe 3
任何帮助将不胜感激。
答案 0 :(得分:5)
只是为了踢,这是一个awk版本:
awk '{print "foo", $0, NR}' files.lst
如果files.lst
包含:
a.txt
b.txt
c.txt
...然后输出:
foo a.txt 1
foo b.txt 2
foo c.txt 3
答案 1 :(得分:2)
Pure Bash:
while read -r line
do
echo "asd $line $((++i))"
done < inputfile
答案 2 :(得分:1)
这是一个简单的Python解决方案,将其保存在名为so.py
的文本文件中。
由于您仍在使用Python v 2.4.2,因此该代码应该与早期版本一起使用:
#!/usr/bin/python
add_text = 'asd' # the string to put in front
fn = open('filenames.txt')
outf = open('outdata.txt', 'w')
i = 1
for filename in fn:
outf.write('%7s %10s %d\n' % (add_text, filename.strip(), i))
i += 1
fn.close()
outf.close()
预计文件的名称在文件filenames.txt
中,生成的输出将转到文件outdata.txt
。
asd aa.exe 1
asd bb.exe 2
asd cc.exe 3
在文件名之前添加的文本已在变量add_text
中修复。
要运行脚本,请在Linux提示符下发出以下命令:
chmod +x so.py <-- this is only needed once
./so.py <-- to run the script
它将使用输入文件生成输出文件。
答案 3 :(得分:0)
在vim中:
:%s/.\+/\=printf("%s %s %d", "asdf", submatch(0), line("."))/