小编Ham*_*eed的帖子

Awk:打印未确定数量的列

我有一个文件,其中包含由制表符分隔的许多字段.我正在尝试打印除第一列之外的所有列,但是想要使用AWK 仅在列中打印它们.文件的格式是

col 1   col 2   ... col n
Run Code Online (Sandbox Code Playgroud)

一行中至少有两列.

样品

2012029754      901749095
2012028240      901744459       258789
2012024782      901735922
2012026032      901738573       257784
2012027260      901742004
2003062290      901738925       257813  257822
2012026806      901741040
2012024252      901733947       257493
2012024365      901733700
2012030848      901751693       260720  260956  264843  264844
Run Code Online (Sandbox Code Playgroud)

因此,我想告诉awk将列2打印到n列大于2的n而不打印空白行,如果该行的列n中没有信息,则全部在一列中,如下所示.

901749095
901744459
258789
901735922
901738573
257784
901742004
901738925
257813
257822
901741040
901733947
257493
901733700
901751693
260720
260956
264843
264844
Run Code Online (Sandbox Code Playgroud)

这是我第一次使用awk,所以请耐心等待.我从命令行写了这个:

awk '{i=2; 
while ($i ~ /[0-9]+/)
{ 
    printf "%s\n", $i
    i++
}
}' bth.data
Run Code Online (Sandbox Code Playgroud)

这更像是一个寻求批准,而不是问一个问题,这是在AWK中做这样的事情的正确方法,还是有更好/更短的方式.

请注意,实际输入文件可能是数百万行.

谢谢

awk

6
推荐指数
1
解决办法
5722
查看次数

阵列长度检查时未初始化的值警告

我有以下代码:

my @product_access = @{ $products->{ $PosDetails->{"SalProductRef"}->[$i]}
                      {DetAccess_tab} };

if ( @product_access == 1 )
{
    $revenue{ $products->{ $PosDetails->{"SalProductRef"}->[$i] }{DetFinanceCategory} }
            {"Total"} += $PosDetails->{"SalSubTotal"}->[$i];
}
Run Code Online (Sandbox Code Playgroud)

在我检查阵列长度的地方,我收到Use of uninitialized value in concatenation警告.在那条线上发出警告似乎有点奇怪.为什么会显示此警告?

arrays perl dereference

1
推荐指数
1
解决办法
162
查看次数

标签 统计

arrays ×1

awk ×1

dereference ×1

perl ×1