2015-10-14 80 views
-1

我有一个csv文件,其中3列用','分隔符分隔。在数据中有一些值,我想删除整个记录。建议如果我可以使用sed/awk,grep命令来做到这一点。从unix中的csv文件中删除带有额外分隔符的行

输入文件:

  • 监视器,显示器,45
  • 键盘,输入,20
  • 响亮,扬声器,输出20
  • 安装,输入,20

预期产出:

  • 监视器,显示器,45
  • 键盘,输入,20
  • 安装,输入,20
+0

你尝试什么记录? – npinti

+0

使用正则表达式可以更容易地提取有效的东西,而不是擦除不正确的东西。例如,在PHP中,可以使用'preg_match_all()'使用该正则表达式'/(?:(?:\ w +,){2} \ w +)/ m'来提取数组中的所有有效行并迭代该数组将数据推回到新文件中。仍然在PHP中,如果在获取数据后关闭初始连接,则可以覆盖CSV文件。 –

回答

0

我用grep命令过滤掉额外逗号行。

grep -v '.*,.*,.*,.*' input_file > output_file. 
  1. 我们需要定义之间的正则表达式。*
  2. -v排除匹配指定的模式,其记录。
0

下面是如何使用AWK做同样的,基本上你想在其中恰好有3场

$ awk -F, 'NF==3 {print $0}' data1.txt 
monitor,display,45 
keyboard,input,20 
mount,input,20 
相关问题