如何删除文件中第三列中包含空格的所有行?

时间:2017-03-21 21:06:15

标签: bash shell

所以,我有一个文件,其中包含我过去几周运行的一些计算结果。我已将结果收集到我打算绘制的文件中。它基本上是一堆格式为" x" " Y" " f(x,y)",像这样:

1.7 4.7 -460.5338556921
1.7 4.9 -460.5368762353
1.7 5.5

但是,有些行(以最后一行为例)在第3列中包含空格,这是由计算失败引起的。我仍然希望绘制可行点,但是,因为有数千个点(因此行),这个任务只需手动完成。我想知道如何编写脚本或程序(我更喜欢使用shell脚本,但我很乐意继续执行任何工作),这会识别这些行并删除它们。有谁知道这样做的方法?

5 个答案:

答案 0 :(得分:5)

awk '$3' <filename>

或更好

awk 'NF > 2' <filename> # if in any entry in the column-3 happens to be zero

这样做的目的!

答案 1 :(得分:0)

这几天任何shell都应该理解的最简单的grep命令形式:

grep -v '^[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*$' <filename>

答案 2 :(得分:0)

使用grep:

grep ' .* [^ ]' file

或使用ERE:

grep -E '\s\S+\s\S' file

答案 3 :(得分:0)

我会用:

perl -lanE 'print if @F==3 && /^[\d\s\.+-]+$/' file

将仅打印行:

  • 包含3个字段
  • 仅包含数字,空格和.+-

答案 4 :(得分:0)

我不知道你将如何策划。您需要grepawk解决方案并将所有有效行传输到您的绘图应用程序中 当您需要为每组值调用程序时,可以在读取值时跳过无效行:

while read -r x y fxy; do
   if [ -n "${fxy}" ]; then
      myplotter "$x" "$y" "${fxy}"
   fi
done < file