我有一个带有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的行。
答案 0 :(得分:1)
如图所示,您的数据文件不符合CSV规则,因为第1行不是逗号分隔。如果逗号之间有空格,那么您将需要一些更复杂的东西,但是如果文件看起来像这样:
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
第一个给出第1行和第3行,第二个给出2,4和5。
答案 1 :(得分:1)
在埃德·莫顿发现错误之后,对此进行了实质性修改。
您可以使用AWK轻松做到这一点:
awk -F' *, *' '
$4 == "" {
print > "FILE1.csv"
}
$4 != "" {
print > "FILE2.csv"
}
' FILE.csv
说明:
-F
将字段分隔符设置为逗号,并且任意两边都可以有空格 1 。或更简洁:
awk -F' *, *' '{print > ("FILE" ($4=="" ? 1 : 2) ".csv")}' FILE.csv
1 请注意,有人质疑OP是否具有制表符加逗号或空格加逗号分隔文件。如果文件包含标签,它将显示为:
1, xx, yy, zz,
2, aa, bb, ,
3, cc, dd, ee,
4, ff, gg, ,
5, hh, ii, ,
在我看来,OP的文件是空格且以逗号分隔,并且向下投票不公平。
答案 2 :(得分:0)
或者,您也可以使用grep
来做到这一点:
如果您需要colx
:
echo "col1 col2 col3 col4" > with.txt && echo "col1 col2 col3 col4" > without.txt
检索数据并保存到两个文件中:
grep -P "\w*?,\s*\w*?,\s*\w*?,\s*\w+," test.csv >> with.txt
grep -P "\w*?,\s*\w*?,\s*\w*?,\s*," test.csv >> without.txt
请注意,使用>
会清除文件,然后在附加>>
的同时写入文件。