我正在尝试组织一个包含 30 列和 1000 行的 CSV 文件。如果第一列相同,我想使用垂直线 (|) 逐列连接行。
输入:
3,XX,YY,123,1234,MM,-,,DD,1235,XC
3,XM,YM,123,1234,MD,-,A,FD,1233,XC
3,XN,YN,123,1234,MM,-,,ED,1235,XC
输出:
3,XX|XM|XN,YY|YM|YN,123,1234,MM|MD,-,A,DD|FD|ED,1235|1233,XC
所以我只想连接不同的值。
我看过这个线但对我的问题没有帮助?
答案1
为什么不是线有帮助吗?稍作修改后尝试
awk -F, '
function p(n,A) {s = n
for (i=2; i<=NF; i++) {s = s FS A[i]
A[i] = $i
}
if (n) print s
}
$1==n {for (i=2; i<=NF; i++) if (A[i] !~ "[|]*" $i "[|]*") A[i] = A[i] "|" $i
next
}
{p(n,A)
n = $1
}
END {p(n,A)
}
' file
3,XX|XM|XN,YY|YM|YN,123,1234,MM|MD,-,|A,DD|FD|ED,1235|1233,XC