【问题标题】:find duplicate in first field, then combine text from second field of duplicate lines在第一个字段中查找重复项,然后合并第二个字段中的重复行文本
【发布时间】:2014-07-10 21:44:27
【问题描述】:

我有两个类似于此的字段的 file.csv:

text,something
more,somethingelse
text,another
foo,bar

我对文件进行排序,以便第一个字段中的所有内容都按顺序排列,以便第一列中的所有重复项都组合在一起。

foo,bar
more,somethingelse
text,something
text,another

我需要做但不知道的是将第二个字段中的文本移动到与第一个字段中的副本相同的行,用“;”分隔。输入第二个字段的顺序无关紧要。我只希望输出是这样的:

foo,bar
more,somethingelse
text,something; another

我已经尝试过了,但它不起作用。不足为奇,因为我只是在学习 awk。

sort file.csv | awk 'BEGIN{last = ""; value = 0;} {if ($1 == last) {print $0, "; value";}}'

我希望 'last' 保存上一行的第一个字段的值,而 'value' 保存上一行的第二个字段的值。但我不知道如何让它发挥作用。

是否可以使用 shell 脚本来执行此操作?感谢您的任何意见。

【问题讨论】:

    标签: awk


    【解决方案1】:

    这应该可以在不需要sort 的情况下工作:

    awk -F, '{
        lines[$1] = (lines[$1] ? lines[$1] "; " $2 : $0)
    }
    END {
        for (line in lines) print lines[line]
    }' file
    more,somethingelse
    text,something; another
    foo,bar
    
    • 将输入字段分隔符设置为,
    • 检查 column1 是否存在于我们的线阵列中。如果是,则填充由; 分隔的第二列。
    • 如果我们的数组中不存在 column1,则将整行指定为值
    • END 块中遍历我们的数组并打印值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多