如何根据第一列中的数字打印文件每一行的次数

如何根据第一列中的数字打印文件每一行的次数
Input_file:
1 string1 
4 string2
2 string3
...

Output_file:
1 string1
4 string2
4 string2
4 string2
4 string2
2 string3
2 string3
...

这是我的代码,但它不起作用。

#!/bin/bash
N=0
cat input_file | while read LINE; do

    N=$((N+1))

awk '{for(i=0;i<'$1';i++);print}' $LINE >> output_file

done

答案1

来自评论

awk '{for(i=0;i<$1;i++) print}' input_file > output_file

这会循环input_file;的每一行在每一行上,它i根据第一个字段循环并打印当前行多次。然后整个输出被重定向到output_file.

答案2

perl

$ cat ip.txt 
1 string1 
4 string2
2 string3
$ perl -ane 'print $_ x $F[0]' ip.txt 
1 string1 
4 string2
4 string2
4 string2
4 string2
2 string3
2 string3
  • -a按空格分割输入行并保存到@F数组的选项
  • -n循环输入文件,默认换行符是行分隔符。不打印输入行
  • -e执行 Perl 代码
  • print $_ x $F[0]显式打印以重复输入行$_第一个字段指定的次数$F[0]

答案3

perl -pae '$_ = $_ x $F[0]' input_file

perl -nae 'print while $F[0]--' inputfile

perl -pae 's/^.*\n\K/$`/m while --$F[0]' inputfile

while IFS= read -r l; do yes "$l" | head -n "${l%%[!0-9]*}"; done < inputfile

while IFS= read -r l; do csh -c "repeat ${l%%[!0-9]*} echo '$l'"; done < inputfile

while IFS= read -r l; do
   for k in $(seq "${l%%[!0-9]*}"); do echo "$l"; done
done < inputfile

相关内容