首页 > 解决方案 > Linux:我想获取 column3 的前 10 条记录。该列有一些缺失的数据。我已经对文件进行了排序

问题描述

我不确定如何在这里忽略丢失的数据。

我的;分隔文件看起来像(用空格写它以便它可读):

Col1  Col2  Col3  Col4  Col5
12    a     ?     ?     ?
1     b     ?     ?     ?
45    c     7.22  6.09  2.2
11    d     7.0   3.89  9.7
26    e     6.24  8.2  5.9
and so on....

我想获取最大值为 column3 的记录

Col1  Col2  Col3  Col4  Col5
45    c     7.22  6.09  2.2
11    d     7.0   3.89  9.7
26    e     6.24  8.2  5.9

我以相反的顺序对 column3 上的文件进行了排序。不知道如何进一步进行。

sort -t';' -k3 -r original.txt > newfile.txt 

标签: linuxsorting

解决方案


命令行的好处在于,您可以轻松地将最佳工具用于正确的应用程序,或者使用管道链接输出,|或者通过创建临时文件(如newfile.txt.

In this case, using sortis the apt choice for sorting your data. 排序后,您可以使用在解析数据方面非常有效的单独工具,awk.

从您的 sorted 开始newfile.txt,此awk操作将仅打印包含 5 个字段的行(假设您丢失的数据实际上丢失并且没有空分隔符,例如您的行看起来像45;c;而不是45;c;;;

awk -F';' 'NF == 5 { print }' newfile.txt

但是,在空字段被分隔的情况下(例如45;c;;;),并假设只有第 3 到 5 列可能缺少数据,这将处理它:

awk -F';' 'NF == 5 && $3 && $4 && $5 { print }' newfile.txt

请注意,由于默认行为awk是打印,因此上述{ print }内容实际上是不必要的,但包含在教学中。

因此,从头到尾,您可以通过以下方式获得所需的结果,

sort -t ';' -rk3 original.txt | awk 'NF==5 && $3 && $4 && $5' > result.txt

推荐阅读