将字符串名称复制x次并归为复制编号

时间:2015-04-23 08:05:36

标签: awk

我想复制密钥名称x次,并有一个单独的列来指示复制号码,例如让我们说我有三个关键名称如下:

101
102
103

所以,我希望每个上面的数字(名称)复制3次,并且有一个单独的标识符号码等于4个字符。因此它看起来像这样:

101  0001
101  0002
101  0003
102  0001
102  0002
102  0003
103  0001
103  0002
103  0003

我想这可能是一个相对直接的awk脚本? *编辑:我不想在脚本中指定要复制的名称 - 它应该是"复制此文本文件中的所有名称",因为它们中有很多(~400)并且都有变量名称类型。

提前谢谢!

3 个答案:

答案 0 :(得分:1)

在bash中

echo {101,102,103}" "{01,02,03}

101 01 101 02 101 03 102 01 102 02 102 03 103 01 103 02 103 03

遵循Fedorqui对换行的建议

printf "%s\n" {101,102,103}" "{01,02,03}

101 01 
101 02 
101 03 
102 01 
102 02 
102 03 
103 01 
103 02 
103 03

答案 1 :(得分:0)

使用awk -v标记传递变量number,这是每行的重复次数,sprint将数字格式化为2位小数,零填充:

awk -v number_repeats=3 '{
  for(i=0; i<number_repeats; i++) { 
    print $0, sprintf("%02d", i+1) 
  } 
}'

答案 2 :(得分:0)

如果你不介意GNU Parallel

parallel -k 'printf "%02d %02d\n"' ::: {6..12} ::: 1 2 3
06 01
06 02
06 03
07 01
07 02
07 03
08 01
08 02
08 03
09 01
09 02
09 03
10 01
10 02
10 03
11 01
11 02
11 03
12 01
12 02
12 03

或者,如果您的密钥位于文件中,则称为keys,如此

32
45
78

您可以阅读文件

parallel -k 'printf "%02d %02d\n" {1} {2}' :::: keys ::: 1 2 3
32 01
32 02
32 03
45 01
45 02
45 03
78 01
78 02
78 03