Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 当4列具有空值时,从CSV文件中删除行_Unix_Csv_Sed - Fatal编程技术网

Unix 当4列具有空值时,从CSV文件中删除行

Unix 当4列具有空值时,从CSV文件中删除行,unix,csv,sed,Unix,Csv,Sed,我有一个CSV文件,我需要过滤掉一些不包含特定值的行。因此,我不关心这些行,希望删除它们或将命令的结果放入新的csv文件中 这是我的CSV文件的格式: employeeid,time,homephone,workphone,ssn,insurance,address,state,salary,position,rank,boss,hiredate 现在有些行没有这些字段的信息。如何执行awk或sec命令来读取csv文件中的所有行,并仅将没有字段为空的行放入另一个文件中?或者可以将每个,替换为像

我有一个CSV文件,我需要过滤掉一些不包含特定值的行。因此,我不关心这些行,希望删除它们或将命令的结果放入新的csv文件中

这是我的CSV文件的格式:

employeeid,time,homephone,workphone,ssn,insurance,address,state,salary,position,rank,boss,hiredate
现在有些行没有这些字段的信息。如何执行awk或sec命令来读取csv文件中的所有行,并仅将没有字段为空的行放入另一个文件中?或者可以将每个
替换为像
notthere
这样的词吗?我有一些文字替换正在进行,但这不是100%的工作

到目前为止,我有这样的想法:

sed -e 's/^,/notthere,/' old.csv > new.csv
这几乎没有做什么,我正在寻找。如果有人能帮助我,我将不胜感激。我对使用linux命令一点经验都没有

谢谢大家!

这应该有效:

sed -e 's/,,/,notthere,/' old.csv > new.csv

一些示例数据可能会有所帮助,但请尝试此操作以跳过包含空字段的行:

awk -F , '{n=0; for (i=1;i<=NF;i++) if ($i=="") n++} n==0' filename

awk-F,'{n=0;for(i=1;i似乎您也可以为连接的逗号grep文件:

grep -v ',,' somefile.csv > newfile.csv
编辑:刚刚意识到在开头和结尾都有要检查的字段。我们可以包括带有正则表达式的字段,如下所示:

grep -vE ',,|^,|,$' somefile.csv > newfile.csv

grep-v
表示“反向”,换句话说:打印所有与这些模式不匹配的行:两个逗号在一起,一个逗号在行首,一个逗号在行尾。这里的
表示“或”。

值得注意的是,上面的示例是“grepping”跨整行。另一种方法是使用如下所示的awk搜索不存在的特定列。给定一个逗号分隔的文件,下面的脚本只打印列2中有空值的行,这些值由
$2
表示。
打印$0
部分意味着打印整行

打印第2列为空的所有行,重定向到new.csv

awk -F "," '$2 !~ /./ {print $0}' old.csv > new.csv
另一个相关示例是,仅当第3列与正则表达式匹配时才打印它
[0-9]

awk -F "," '$3 ~ /[0-9]/ {print $3}' old.csv > new.csv

应该添加
-e's/^,/notthere,/'-e's/,$/,notthere/'
来检查第一个和最后一个字段是否为空非常感谢!相反的方法很有趣,同时也很有效。现在我可以继续我需要做的其他代码了。谢谢!没问题。我实际上使用了
grep-v
grep-vE
所有的技术我
awk -F "," '$3 ~ /[0-9]/ {print $3}' old.csv > new.csv