当前位置: 首页 > 面试题库 >

使用AWK根据列数过滤行

锺离玮
2023-03-14
问题内容

我有包含单列和两列的数据行。我要做的是提取仅包含2列的行。

0333 foo
 bar
23243 qux

仅产生:

0333 foo
23243 qux

请注意,它们是制表符分隔的,即使对于只有一列的行,您也可以在其开头使用制表符。

怎么做呢?

我尝试了这个但是失败了:

awk '$1!="";{print $1 "\t" $2}' myfile.txt

enter code here

问题答案:

您需要使用NF(字段数)变量来控制操作,例如以下记录:

$ echo '0333 foo
>  bar
> 23243 qux' | awk 'NF==2{print}{}'
0333 foo
23243 qux

如果字段数为2,将打印该行,否则将不执行任何操作。我之所以具有(看似)奇怪的构造,NF==2{print}{}是因为awk如果没有任何规则匹配一行,则默认情况下将打印的某些实现。empty命令{}保证不会发生这种情况。

如果您很幸运地拥有其中一个不做此事的人,则可以摆脱:

awk 'NF==2'

但以上第一种解决方案在 两种 情况下 适用。



 类似资料:
  • 问题内容: 我有一组对象,它们只是项目。我还有一个下拉菜单,我希望使用该下拉菜单允许用户按价格或评分进行过滤,但是在页面加载时不应进行过滤。 如何根据当前选择选项映射项目数据以进行过滤? 我有一个笨拙的入门:LINK 问题答案: 首先,您选择的值不明确。它们包含可以对条目进行过滤和排序的值-将它们分开是两个功能,因此将它们分开。 接下来,您需要定义一个自定义过滤器,该过滤器将根据所选的评级过滤数据

  • 问题内容: 我有一个值列表,需要根据给定的布尔值列表中的值进行过滤: 我使用以下行生成一个新的过滤列表: 结果是: 这条线工作正常,但是(对我而言)看起来有点过大了,我想知道是否有更简单的方法来实现这一目标。 忠告 以下答案提供了两个好的建议: 1-不要像我一样命名列表,因为它是内置函数。 2-不要比较像我做的事情,因为这是不必要的。只需使用就足够了。 问题答案: 您正在寻找: 时序比较(py3.

  • 问题内容: 我正在尝试过滤具有作为行值的PySpark数据框: 我可以使用字符串值正确过滤: 但这失败了: 但是每个类别上肯定都有价值。这是怎么回事? 问题答案: 您可以使用/ : 如果你想简单地丢弃值,您可以使用与参数: 基于等式的比较将无法正常工作,因为在SQL中未定义,因此任何将其与另一个值进行比较的尝试都将返回: 与值进行比较的唯一有效方法是/ ,它等效于/方法调用。

  • 问题内容: 我是angularjs和javascript的新手,所以请保持友好,我有两个下拉项(Ionic Select),它们都保存来自服务的数据。问题是我需要过滤它们才能像这样一起工作:如果我在第一个下拉列表中选择一个公司,则只有该公司内部的代表才应显示在另一个下拉列表中。 我按照Angularjs文档中的说明尝试使用,但我不知道这样做是不正确的方法。 HTML: Javascript: 问题

  • 可以对搜索结果进行过滤,只显示包含特定字段值的文档。也可以创建否定过滤器,排除包含特定字段值的文档。 从 Fields 表或 Documents 表中选择要添加的字段过滤器。除了可以创建积极字段和消极过滤器外,Documents 表还可以过滤某一字段是否存在。使用过的过滤器会在 Query 栏下方显示。消极过滤器用红色显示。 从 Fields 列表中添加一个过滤器: 点击想要过滤的字段名。这里显示

  • 我想编写能够使用许多条件来过滤对象列表的代码,但我希望条件的数量波动(有时使用1个字段过滤,有时使用所有3个字段过滤)。 在我的情况下,我希望用户可以为某个字段选择“任何”,但仍然对其他字段应用过滤器。在下面的情况下,用户可以通过字段< code>x,y 我已经编写了下面的代码,可以在这种情况下工作,但在将来添加更多过滤器时效率会越来越低。(2个过滤器导致4个返回语句,3个过滤器导致8个返回语句等