perl – 删除全零的行和列

前端之家收集整理的这篇文章主要介绍了perl – 删除全零的行和列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何删除包含所有零的文本文件中的行(行)和列.
例如,我有一个文件
1 0 1 0 1
0 0 0 0 0
1 1 1 0 1
0 1 1 0 1
1 1 0 0 0
0 0 0 0 0
0 0 1 0 1

我想删除第2行和第4行以及第2列.输出应如下所示:

1 0 1 1 
1 1 1 1 
0 1 1 1 
1 1 0 0 
0 0 1 1

我可以使用sed和egrep来做到这一点

sed '/0 0 0 0/d' or egrep -v '^(0 0 0 0 )$'

对于带有零的行,但对于具有数千列的文件来说太不方便了.我不知道如何删除全部为零的列,第二列.

解决方法

另一个awk变种:
awk '{show=0; for (i=1; i<=NF; i++) {if ($i!=0) show=1; col[i]+=$i;}} show==1{tr++; for (i=1; i<=NF; i++) vals[tr,i]=$i; tc=NF} END{for(i=1; i<=tr; i++) { for (j=1; j<=tc; j++) { if (col[j]>0) printf("%s%s",vals[i,j],OFS)} print ""; } }' file

扩展表格:

awk '{
   show=0;
   for (i=1; i<=NF; i++) {
      if ($i != 0)
         show=1;
    col[i]+=$i;
   }
}
show==1 {
   tr++;
   for (i=1; i<=NF; i++)
      vals[tr,i]=$i;
   tc=NF
}
END {
   for(i=1; i<=tr; i++) {
      for (j=1; j<=tc; j++) {
         if (col[j]>0)
            printf("%s%s",OFS)
      }
      print ""
   }
}' file

猜你在找的Perl相关文章