【问题标题】:Shell grouping file repetitive patternShell 分组文件重复模式
【发布时间】:2017-11-03 20:12:37
【问题描述】:

假设我有一个文件

a,anything,keyboard
b,anything,mouse
c,anything,door
a,anything,monitor
d,anything,keyboard

我想要的结果

a,anything,keyboard - monitor
b,anything,mouse
c,anything,door
d,anything,keyboard

模式“a”重复,我想将“键盘”和“显示器”合并为结果。

我的问题是如何将每行开头重复的模式(在本例中为“a”)合并到一行中,添加不同之处(在本例中,添加单词“monitor”

猫文件.csv |剪切-d',' -f1 |排序 -u 结果:

a
b
c
d

我想要结果:

a,anything,keyboard - monitor
b,anything,mouse
c,anything,door
d,anything,keyboard

【问题讨论】:

  • 这里需要实现排序的哪一部分?
  • 我增加了我的问题;)
  • 关于如何为组合键收集多个值的方法可能有很多重复项,尽管我无法快速找到与此完全重复的一个。这不是一个不常见的问题。我鼓励您搜索以前的类似问题。

标签: shell sorting awk scripting


【解决方案1】:

我称之为分组而不是排序

gawk(GNU awk)解决方案:

awk -F, 'BEGIN{ PROCINFO["sorted_in"]="@val_str_asc" }{ a[$1]=($1 in a)? a[$1]" - "$3 : $0 }
         END{ asort(a); for(i in a) print a[i] }' file

输出:

a,anything,keyboard - monitor
b,anything,mouse
c,anything,door
d,anything,keyboard

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2019-11-13
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多