perl – 删除全零的行和列
发布时间:2020-12-15 22:01:15 所属栏目:大数据 来源:网络整理
导读:如何删除包含所有零的文本文件中的行(行)和列. 例如,我有一个文件: 1 0 1 0 10 0 0 0 01 1 1 0 10 1 1 0 11 1 0 0 00 0 0 0 00 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来做
如何删除包含所有零的文本文件中的行(行)和列.
例如,我有一个文件: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |