gpt4 book ai didi

bash - uniq + 不从文件中获取 uniq 字符串

转载 作者:行者123 更新时间:2023-11-29 09:41:41 26 4
gpt4 key购买 nike

请看下面的内容我想要的只是从文件中获取 node_name 字符串并执行 uniq 以获取 uniq 字符串(如果它们相等)

但在下面的示例中,我有两条相等的线 (node_name moon1)

但为什么 uniq 命令不将其减少到一行??? ,我真的不明白这是为什么?

 sed s'/=/ /'g file|  awk -v WORD=node_name '$2 == WORD {print $0}' | awk '{print $2" "$3}' | sort | uniq

node_name moon1
node_name moon1

文件:

  .
.

/home/home1/home2/config1/COMPANY/my.config node_name=moon1
/home/home1/home2/config1/MEAS2XML/my.config.tmp node_name=moon1

.
.

最佳答案

uniq无法合并相同行的主要原因有两个:

  • 这些行并不完全相同 - 额外的尾随空格通常是这里的可疑之处。 awk 命令应该过滤这个例子中的那些,但你仍然可以检查它。混淆行终止符也是一个可能的原因。

  • 行不相邻 - 如果语言环境设置不正确,sort 可以并且将无法“正确地”对行进行排序。我已经看到了非 ASCII 文本的奇怪情况,其中相同的行不会一个接一个地结束。在 uniq 命令之前检查 sort 的输出。您的区域设置是什么?

顺便说一句,'sort -u' 是 'sort | 的更好选择uniq'.

编辑:

似乎是以下一个或两个问题:

  • 您有混合行终止符。如果您的某些行以 LF(\n,Unix 样式终止符)结尾,而另一些以 CR/LF(\r\n,DOS 样式终止符)结尾,uniq 会将它们视为不同的行,即使它们在其他方面相同。

  • 某些行中的尾随空格以及 CR/LF DOS 样式的行终止符。 CR(回车,'\r')字符不被大多数(所有?)unix 实用程序(包括 awk)视为空白。如果其中一行没有任何其他尾随空格,则 CR 将被视为其最后一个字段的一部分并被打印出来。另一方面,在最后一个字段和 CR 之间有空格的行中,awk 打印的最后一个字段将不包含 CR。

在这种情况下,将 CR/LF 行终止符更改为 LF 将解决这两个问题,尽管通常最好也过滤尾随空格:

  • dos2unix 是首选方式
  • 作为替代方案,通过 sed 's|\r$||'
  • 过滤您的文件

关于bash - uniq + 不从文件中获取 uniq 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4247791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com