在文本的每一行前面加一个字母,按升序排列

时间:2015-02-02 21:19:55

标签: bash prepend letter

bash脚本将其输出(文件列表)写入文件。

file.txt的:

/home/user/dir1/dir2/foo00
/home/user/dir1/dir2/foo01
/home/user/dir1/dir2/foo02

我想在每行开头写一个字母,从a开始,到达z之后,继续aa,ab ...

最后,输出应该看起来像

file.txt的:

a /home/user/dir1/dir2/foo00
b /home/user/dir1/dir2/foo01
c /home/user/dir1/dir2/foo02
...
z /home/user/dir1/dir2/foo26
aa /home/user/dir1/dir2/foo27

作为shell脚本的新手,我不知道哪种工具可能是合适的。我所以我的问题肯定有点不精确。

如果可能的话,我更喜欢使用bash内置的插件。

我该怎么做这个操作?

2 个答案:

答案 0 :(得分:3)

仅使用bash builtins,没有子shell:

prefixes=({a..z}  {a..z}{a..z}  {a..z}{a..z}{a..z})
i=0
while IFS= read -r line
do
  printf "%s %s\n" "${prefixes[i++]}" "$line"
done < file.txt

答案 1 :(得分:1)

这不是bash,但perl的内置递增可以做你想要的:

#!/usr/bin/env perl
my $pfx = 'a';
print $pfx++, ' ', $_ while (<>);

此脚本从stdin读取并生成您搜索的输出。