如何乘以AWK输出

时间:2016-05-05 12:31:18

标签: bash awk

我有一个文件data.csv,其中包含多行代码:

A
B
C

我希望代码的输出乘以n次:

A
B
C
A
B
C

以下是我尝试过的一行以及它返回的内容的示例:

awk '{for (i=0; i<3 ;i++){ print $1}}' input.csv
A
A
A
B
B
B
C
C
C

与猫和其他工具相同

9 个答案:

答案 0 :(得分:2)

这样做:

for i in {1..3}; do cat data.csv; done

但它不适用于管道。

感谢您的评论

答案 1 :(得分:2)

n

请注意,上述内容仅存储文件{{1}}次的名称,而不是文件的内容,因此适用于任何文件任何大小的,因为它使用可忽略的记忆。

答案 2 :(得分:2)

您可以使用cat和printf

cat $(printf "%0.sfile " {1..3})

答案 3 :(得分:1)

这是一个有效的单线程:yes data | head -3 | xargs cat

$ cat data 
A
B
C
$ yes data | head -3 | xargs cat
A
B
C
A
B
C
A
B
C
$

head -3 =&gt;此处3表示n次。{/ p>

或使用awk解决方案:

$ cat data 
A
B
C
$ awk 'BEGIN{i=0} {a[i]=$0;i++} END {for(i=0;i<=3;i++) for(j=0;j<=NR;j++) print a[j]}' data | sed '/^$/d'
A
B
C
A
B
C
A
B
C
A
B
C
$

答案 4 :(得分:1)

试试这个:

seq 2 | xargs -Inone cat input.csv

答案 5 :(得分:1)

可能是最短的

cat input.csv{,,}

答案 6 :(得分:0)

for (( c=1; c<=3; c++ ))
do
cat Input_file.csv
done

答案 7 :(得分:0)

假设您正在编写shell脚本,为什么要使用awk?

for i in `seq 3`; do
  cat data.csv
done

如果您想使用管道进行此操作,例如使用awk,您需要将文件数据存储在内存中或临时保存到磁盘。例如:

cat data.csv | \
  awk '{a = a $0 "\n"} END { for (i=0; i<3 ;i++){ printf "%s",a; }}'

答案 8 :(得分:0)

使用sed和hold / pattern空间:

在这种情况下只有一个字母。 ABC:

如果您想打印一次:

cat temp | sed 's/\(.*\)/\1/;N;N;H'

输出:

[anthony@aguevara ~]$ cat temp | sed 's/\(.*\)/\1/;N;N;H;G;G'
A
B
C
[anthony@aguevara ~]$

两次(只需附加一个分号/大写字母G):

cat temp | sed 's/\(.*\)/\1/;N;N;H;G'

输出:

[anthony@aguevara ~]$ cat temp | sed 's/\(.*\)/\1/;N;N;H;G;G'
A
B
C

A
B
C
[anthony@aguevara ~]$

三次(另一个G):

cat temp | sed 's/\(.*\)/\1/;N;N;H;G;G'

输出:

[anthony@aguevara ~]$ cat temp | sed 's/\(.*\)/\1/;N;N;H;G;G'
A
B
C

A
B
C

A
B
C
[anthony@aguevara ~]$

等等。

文件(文件中没有换行符):

[anthony@aguevara ~]$ cat temp
A
B
C
[anthony@aguevara ~]$