输入文件包含由--
分隔的多个表。每个表包含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
命令。感谢。
答案 0 :(得分:1)
使用以下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]);
}
}
答案 1 :(得分: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
答案 2 :(得分:0)
由于数据是重复的,你可以这样做:
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;i<=6;i++) {
for (j=1;j<=f;j++) printf "%s\t",a[j FS i]
print ""}
}' file