我有一个大型 CSV 文件,其中包含许多列,这些列大多具有重复值,但有些列的值在行与行之间不断变化。这些变化的列要么包含数据,要么为空。其他列具有固定值(请参见下面的示例)。如何压缩或删除重复的行,以便将空行合并为更少的行?我已经编写了一个 Python 脚本来执行此操作,但感觉应该有一些优雅的 Linux 命令行方法可以一次性执行此操作。
CSV 输入示例:
固定第 1 栏 | 固定第 2 栏 | 变量第 3 列 | 变量第 4 列 |
---|---|---|---|
A | B | 1 | |
A | B | 1 | |
C | D | 1 | |
C | D | 1 |
预期输出是:
固定第 1 栏 | 固定第 2 栏 | 变量第 3 列 | 变量第 4 列 |
---|---|---|---|
A | B | 1 | 1 |
C | D | 1 | 1 |
注意前两列具有固定数据,而其他两列具有空值或数据值。合并行本质上是填充空列,同时保持固定列相同。
像这样的 awk 脚本:
awk -F "\t" 'BEGIN{ OFS="\t"; getline }{ a3[$1FS$2]+=$3; a4[$1FS$2]+=$4 }END{ for( i in a3){ print i,a3[i],a4[i]} }' input
输出:
C D 1 1
A B 1 1
您必须自己解决丢失的标头(抱歉,没有时间添加它们)😉