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