复制字符串名称 x 次并分配复制编号

  • 本文关键字:复制 分配 编号 字符串 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)并且都具有变量名称类型。

提前谢谢你!

in 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 "%sn" {101,102,103}" "{01,02,03}
101 01 
101 02 
101 03 
102 01 
102 02 
102 03 
103 01 
103 02 
103 03

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

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

如果你不介意GNU Parallel

parallel -k 'printf "%02d %02dn"' ::: {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 %02dn" {1} {2}' :::: keys ::: 1 2 3
32 01
32 02
32 03
45 01
45 02
45 03
78 01
78 02
78 03

最新更新