gpt4 book ai didi

bash - 排序 |独特 | xargs grep ... 其中行包含空格

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

我有一个逗号分隔的文件“myfile.csv”,其中第 5 列是日期/时间戳。 (mm/dd/yyyy hh:mm)。 我需要列出所有包含重复日期的行(有很多)

我正在通过 cygwin 为 WinXP 使用 bash shell

$ cut -d, -f 5 myfile.csv | sort | uniq -d 

正确返回重复日期的列表

01/01/2005 00:22
01/01/2005 00:37
[snip]
02/29/2009 23:54

但我不知道如何将其提供给 grep 以提供所有行。显然,我不能直接使用 xargs,因为输出包含空格。我以为我可以做 uniq -z -d 但出于某种原因,组合这些标志会导致 uniq(显然)不返回任何内容。

所以,鉴于此

 $ cut -d, -f 5 myfile.csv | sort | uniq -d -z | xargs -0 -I {} grep '{}' myfile.csv

不起作用...我该怎么办?

我知道我可以用 perl 或其他脚本语言来做...但是我固执的本性坚持认为我应该能够用标准的 bash 来做命令行工具,如 sortuniqfindgrepcut 等。

教我吧,bash 大师们。如何使用典型的 cli 工具获取我需要的行列表?

最佳答案

  1. sort -k5,5 将对字段进行排序并避免剪切;
  2. uniq -f 4 将忽略 uniq 的前 4 个字段;
  3. 在 uniq 上加上 -D 会得到所有重复的行(相对于 -d,只会得到一个);
  4. 但是 uniq 需要制表符分隔而不是 csv,所以 tr '\t' ',' 来解决这个问题。

问题是如果您在#5 之后有不同的字段。你们约会的长度都一样吗?您可以向 uniq 添加 -w 16(包括时间)或 -w 10(仅用于日期)。

所以:

tr '\t' ',' < myfile.csv | sort -k5,5 | uniq -f 4 -D -w 16

关于bash - 排序 |独特 | xargs grep ... 其中行包含空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/612439/

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