仅打印第一列唯一的行

谢谢

我正在寻找一种对列表进行排序并打印所有行的方法,其第一列仅出现一次-即,仅在第一列上匹配。例如,我有一个文件,其中第一列是路径,第二列包含“类型”

/path/foo/1 footsy
/path/foo/1 barsy
/path/foo/X barsy
/path/bar/2 footsy
/path/bar/2 barsy
/path/foo/Y footsy

(该文件实际上是排序的-k1,1)

现在,我只想提取类似

/path/foo/X barsy
/path/foo/Y footsy

我正在考虑使用awk的某种方式,其中我必须存储前一行并将前一行的第一个字段与当前行中的相应字段进行比较。但是我还不知道如何完成它:(我试图适应另一个问题中找到的解决方案,但是它实际上并没有达到预期的效果

awk '{
  prev=$0; path=$1; type=$2
  getline
  if ($1 != $path) {
    print prev
  }
}'
G-Man说“恢复莫妮卡”
  1. awk通常读取输入的每一行并在其上调用脚本。您将使用的getline情况很少,而且相差甚远。使用六行输入运行脚本时,将概述发生的情况:

    正常读取第1行

    设置变量
    Call getline,它读取第2行的
    比较变量

    正常读取第3行

    设置变量
    Call getline,它读取第4行
    比较变量

    正常读取第5行

    设置变量
    Call getline,它读取第6行
    比较变量

    显然,这是行不通的。

  2. 其次,您在awk代码中犯了一个常见错误在中awk,将输入中的字段引用为,将变量引用为这与shell脚本不同,在shell脚本中,命令行参数被引用为,变量被引用为您的测试$numbervariable_name$number$variable_name

    if ($1 != $path)
    

    应该

    if ($1 != path)
    
  3. 您的整体方法是有缺陷的。您无法通过一次查看两行来识别在文件中仅出现一次的字符串。我相信您可以通过一次查看三行来做到这一点(即通过将前保留在变量中),但是这样的事情变得复杂而混乱。计算发生次数可能更简单。这是对脚本进行的最小修改。

    awk '{
      if ($1 != path) {
        if (count == 1) {
          print prev
        }
        count=1
      }
      else count++
      prev=$0; path=$1
    }
    END {
        if (count == 1) {
          print prev
        }
    }'
    

    我删除了type,因为您从未使用过。

    披露:这与glenn回答的最后一部分基本相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅打印第一列唯一的行

来自分类Dev

仅打印文件中具有唯一第一列和特定第三列值的那些行

来自分类Dev

打印第一列

来自分类Dev

仅在第一列中打印仅包含一个值的一个副本的行

来自分类Dev

查找重复的行,但仅针对唯一列

来自分类Dev

打印第一列不在列表中的行

来自分类Dev

搜索字符串并使用awk打印第一行的第一列

来自分类Dev

PyQt5 QTableWidget仅显示第一行和第一列

来自分类Dev

如何仅打印最后一列?

来自分类Dev

如何仅打印最后一列?

来自分类Dev

如何仅计算最后一列中的连续空格并将总和打印到第一列

来自分类Dev

多列索引中唯一的第一列

来自分类Dev

仅多次打印第一行

来自分类Dev

如何从第一列的所有列中仅选择一行

来自分类Dev

打印第一行的第一列和最后一行的第二列,其中最后一列具有相同的值

来自分类Dev

如何从唯一列获取行?

来自分类Dev

如何在当前行中打印下一行的第一列?

来自分类Dev

如何在Linux bash中为第一列的每个唯一值打印最新日期

来自分类Dev

GROUP BY仅具有一列序列的第一行?

来自分类Dev

GROUP BY仅具有一列序列的第一行?

来自分类Dev

仅当在打印更改的行和整个文本时该行的第一列中有字符串时,才如何更改列数[使用awk]

来自分类Dev

如何使用awk将第一列和第二列的第一行打印为单列?

来自分类Dev

与第一列相同的平均行

来自分类Dev

删除第一列重复的行

来自分类Dev

使用Excel将仅唯一列转置为标题行

来自分类Dev

在列中查找与第一列相同的字母并打印

来自分类Dev

根据唯一列值打印<li>列表

来自分类Dev

如何从我的txt文件的第一列中打印前20条特定行?

来自分类Dev

使UNIQUE()函数在搜索重复项时仅求值表的第一列而不是整个行

Related 相关文章

  1. 1

    仅打印第一列唯一的行

  2. 2

    仅打印文件中具有唯一第一列和特定第三列值的那些行

  3. 3

    打印第一列

  4. 4

    仅在第一列中打印仅包含一个值的一个副本的行

  5. 5

    查找重复的行,但仅针对唯一列

  6. 6

    打印第一列不在列表中的行

  7. 7

    搜索字符串并使用awk打印第一行的第一列

  8. 8

    PyQt5 QTableWidget仅显示第一行和第一列

  9. 9

    如何仅打印最后一列?

  10. 10

    如何仅打印最后一列?

  11. 11

    如何仅计算最后一列中的连续空格并将总和打印到第一列

  12. 12

    多列索引中唯一的第一列

  13. 13

    仅多次打印第一行

  14. 14

    如何从第一列的所有列中仅选择一行

  15. 15

    打印第一行的第一列和最后一行的第二列,其中最后一列具有相同的值

  16. 16

    如何从唯一列获取行?

  17. 17

    如何在当前行中打印下一行的第一列?

  18. 18

    如何在Linux bash中为第一列的每个唯一值打印最新日期

  19. 19

    GROUP BY仅具有一列序列的第一行?

  20. 20

    GROUP BY仅具有一列序列的第一行?

  21. 21

    仅当在打印更改的行和整个文本时该行的第一列中有字符串时,才如何更改列数[使用awk]

  22. 22

    如何使用awk将第一列和第二列的第一行打印为单列?

  23. 23

    与第一列相同的平均行

  24. 24

    删除第一列重复的行

  25. 25

    使用Excel将仅唯一列转置为标题行

  26. 26

    在列中查找与第一列相同的字母并打印

  27. 27

    根据唯一列值打印<li>列表

  28. 28

    如何从我的txt文件的第一列中打印前20条特定行?

  29. 29

    使UNIQUE()函数在搜索重复项时仅求值表的第一列而不是整个行

热门标签

归档