Awk每行打印3次?

Awk每行打印3次?,awk,Awk,用这个awk一个班轮 awk'{lines[NR]=$0}{fori=0;i我将使用sed: 您只需要两个p操作,因为sed在默认情况下已经打印了一行 使用awk,它可以是: awk '1;1;1' file 这与: awk '1{print}1{print}1{print}' file 或 或者简单地说: awk '{print;print;print}' file $用于访问单行中的字段,特殊情况下,整行使用$0 发生的情况是,第[i]行返回一个字符串。$x要求x是一个整数。因此,该字

用这个awk一个班轮 awk'{lines[NR]=$0}{fori=0;i我将使用sed:

您只需要两个p操作,因为sed在默认情况下已经打印了一行

使用awk,它可以是:

awk '1;1;1' file
这与:

awk '1{print}1{print}1{print}' file

或者简单地说:

awk '{print;print;print}' file
$用于访问单行中的字段,特殊情况下,整行使用$0

发生的情况是,第[i]行返回一个字符串。$x要求x是一个整数。因此,该字符串被隐式转换为零,并且打印的$0是当前行的3倍


如果没有它,您将在读取行0、1和2后打印它们,但awk中没有行0,因此将作为空行打印。

如果您希望使用循环将每行重复N次,则应将脚本更改为:

awk '{ for (i=0; i<3; i++) print }' file
使用循环的优点是,您可以使用shell变量定义每行应打印的次数。您甚至可以将其转换为shell函数:

repeat_line_n_times() {
    n=$1
    file=$2
    awk -v n="$n" '{ for (i=0; i<n; i++) print }' "$file"
}

repeat_line_n_times 3 file
显然,您可以展开此循环,并以较短的脚本结束,以获得较少的行数,但这种方法的扩展性要好得多

如果您希望将示例中的每一行存储在一个数组中,那么不清楚为什么会出现这种情况,那么您应该修改脚本,如下所示:

awk '{ lines[NR] = $0; for (i=0; i<3; i++) print lines[NR] }' file
请注意,所有代码都在同一个{action}块中,根据您的尝试,$用于引用awk中的特定字段,因此不应在变量前面使用,除非该变量包含字段的编号。当然,我仅使用lines数组来说明如何正确执行此操作;正如我在第一个示例中所示,默认的print no参数在这里起作用,因为您试图打印当前记录$0。

在awk中,将$视为返回给定字段值的函数。因此,$lines[i]的作用类似于getFieldValueForColumnlines[i]
awk '{print}{print}{print}'
awk '{print;print;print}' file
awk '{ for (i=0; i<3; i++) print }' file
repeat_line_n_times() {
    n=$1
    file=$2
    awk -v n="$n" '{ for (i=0; i<n; i++) print }' "$file"
}

repeat_line_n_times 3 file
awk '{ lines[NR] = $0; for (i=0; i<3; i++) print lines[NR] }' file