2

我得到了一个 .txt 文件,其中包含“x y”格式的点坐标。它们代表平面上的点云。我的想法是降低云的“密度”,将点数减少一半。我正在使用 linux,所以我想用 sed 删除一半的行,但只删除偶数或奇数行,或者无论如何一行两行。为了更清楚,我将发布一个示例:

435.225 108.891
435.212 108.894 <-- to delete
435.225 108.894
435.238 108.894 <-- to delete
435.3 108.894
435.212 108.897 <-- to delete
435.238 108.897
435.288 108.897 <-- to delete

435.225 108.891
435.225 108.894
435.3 108.894
435.238 108.897
4

3 回答 3

7

sed

$ sed -n 1~2p file
435.225 108.891
435.225 108.894
435.3 108.894
435.238 108.897

它打印编号为 的行2K+1,即奇数行。

或删除偶数(感谢 anishane!):

$ sed 2~2d file
435.225 108.891
435.225 108.894
435.3 108.894
435.238 108.897

来自man sed

地址--->第一步~

匹配从第一行开始的每一步。例如,''sed -n 1~2p'' 将打印输入流中的所有奇数行,地址 2~5 将从第二行开始每隔五行匹配一次。(这是一个扩展。)

就是awk这样:

$ awk 'NR%2' file
435.225 108.891
435.225 108.894
435.3 108.894
435.238 108.897

作为NR行号的代表,NR%2仅在奇数上才是正确的,因此这些将是打印的。

于 2013-10-28T11:45:30.973 回答
2

这可能对您有用:

sed 'n;d' file

为奇数。

和:

sed '1!n;d' file

甚至。

于 2013-10-28T21:18:39.587 回答
0

尝试在脚本(.sh 文件)中运行此逻辑

#!/bin/bash
cnt=0
while read line
do


 if [ $cnt -eq 0 ] 
 then 
   echo $line >> output.txt
   cnt=1
 elif [ $cnt -eq 1 ]
  then
    cnt=0
 fi
done < inputfile.txt
于 2013-10-28T11:52:40.660 回答