Sed 从多个表中提取第二列并以制表符分隔打印它们

Sed 从多个表中提取第二列并以制表符分隔打印它们,sed,awk,multiple-columns,text-parsing,Sed,Awk,Multiple Columns,Text Parsing,一个输入文件包含多个由--分隔的表。每个表包含3列。我想从每个表中选取第二列,并在表选项卡上以分隔符打印列值 输入文件: 402 52 2 403 68 0 404 0 0 405 0 0 407 1 3 -- 1315 0 0 1316 0 0 1317 335 0 1318 2 3 1319 0 0 -- 189

一个输入文件包含多个由
--
分隔的表。每个表包含3列。我想从每个表中选取第二列,并在表选项卡上以分隔符打印列值

输入文件:

402     52      2
403     68      0
404     0       0
405     0       0
407     1       3
--
1315    0       0
1316    0       0
1317    335     0
1318    2       3
1319    0       0
--
1892    0       0
1893    1       4
1894    0       0
1895    920     0
1896    2       3
输出文件:

52  0   0
68  0   1
0   335 0
0   2   920
1   0   2

请建议使用
awk
sed
命令。谢谢。

使用以下awk脚本:

#!/usr/bin/awk

BEGIN { nc=1; nr_ = 1; maxr = 1;}
/^--$/ {
    if (maxr < nr_ )
        maxr = nr_;
    nc++; nr_=1;
    next;
}
{ col[nc, nr_++] = $2; }
END {
    for(r = 1; r < maxr ; r++) {
        for(c = 1; c < nc - 1; c++) {
            printf("%s\t", col[c, r]);
        }
        printf("%s\n", col[nc-1, r]);
    }
}
#/usr/bin/awk
开始{nc=1;nr=1;maxr=1;}
/^--$/ {
如果(最大值
这里是另一种方式:

$ awk '
NF>1{++count; col[count]=(flag)?col[count] "\t" $2:$2; next}
{max=(max>count)?max:count; count=0; flag=1}
END{for(c=1;c<=max;c++) print col[c]}' file
52   0    0
68   0    1
0    335  0
0    2    920
1    0    2
$awk'
NF>1{++count;col[count]=(标志)?col[count]“\t”$2:$2;next}
{max=(max>count)?max:count;count=0;flag=1}

END{for(c=1;c由于数据是重复的,您可以这样做:

awk 'NR%6 {if (NR%6==1) f++;a[f FS NR%6]=$2} END {for (i=1;i<=6;i++) {for (j=1;j<=f;j++) printf "%s\t",a[j FS i];print ""}}' file
52      0       0
68      0       1
0       335     0
0       2       920
1       0       2

awk'NR%6{if(NR%6==1)f++;a[f FS NR%6]=$2}END{for(i=1;编写这个程序很有帮助。它正在工作。@FIROZ:如果这个答案解决了您的问题,请单击旁边的大复选标记接受它。此外,如果其他答案也有帮助,您可以投票给他们。+1;做得很好:更简洁、更高效;您通过收集列v来建立输出行在一维数组中逐行跨表的值(但最好使用更具描述性的变量名:)
awk '
NR%6 {
    if (NR%6==1)
        f++
    a[f FS NR%6]=$2}
END {
    for (i=1;i<=6;i++) {
        for (j=1;j<=f;j++) printf "%s\t",a[j FS i]
        print ""}
    }' file