首页 > 解决方案 > 将所有有和没有空白字段的行打印到单独的文件中

问题描述

我有一个带有 col1、col2、col3、col4 的 .csv 文件,我想消除那些在 col4 中没有任何值的行。

col1 col2 col3 col4
----------------------
1,    xx,  yy,  zz,
2,    aa,  bb,    ,
3,    cc,  dd,  ee,
4,    ff,  gg,    ,
5,    hh,  ii,    ,

我希望您返回 2 个文件,其中一个包含:

col1 col2 col3 col4
---------------------
1,    xx,  yy,  zz,
3,    cc,  dd,  ee,

和另一个:

col1 col2 col3 col4
---------------------
2,    aa,   bb,    ,
4,    ff,   gg,    ,
5,    hh,   ii,    ,

可以使用诸如 awk、sed、grep 之类的工具来执行此操作……我不知道如何执行打印具有空列 4 或 NULL 的行的部分。

标签: bashawksedgrep

解决方案


如图所示,您的数据文件不符合 CSV 规则,因为第 1 行不是逗号分隔的。如果逗号之间有空格,那么您将需要更复杂的东西,但如果文件看起来更像:

1,xx,yy,zz,
2,aa,bb,,
3,cc,dd,ee,
4,ff,gg,,
5,hh,ii,,

然后这些将根据需要分隔行:

awk -F, '{if(length($4)>0){print}}' col.csv

awk -F, '{if(length($4)==0){print}}' col.csv

第一个将给出第 1 行和第 3 行,第二个将给出第 2,4 和 5 行。


推荐阅读