考虑下面的输入文件。输入文件:
C1|C2|C3|C4|C5|C6
0|1|2|3|0-1-2-3|4
0|2|2|4|0-1-2-3|5
0|1|2|3|1-3-2-4|4
0|1|2|3|1-1-3-4|4
0|1|2|3|1-1-3-4|5
0|1|2|3|4-5-2-6|4
0|1|2|3|4-5-2-6|6
0|4|5|3|7-4-2-4|4
0|1|2|3|7-4-2-5|4
0|1|2|3|7-4-2-5|5
0|1|2|3|7-4-2-5|6
0|1|2|3|7-5-2-6|5
基于字段5,例如第一条记录中的0-1-2-3,预计输出拆分文件如下拆分文件1所示:
C1|C2|C3|C4|C5|C6
0|1|2|3|0-1-2-3|4
0|2|2|4|0-1-2-3|5
0|1|2|3|1-3-2-4|4
0|1|2|3|1-1-3-4|4
0|1|2|3|1-1-3-4|5
分割档2:
C1|C2|C3|C4|C5|C6
0|1|2|3|4-5-2-6|4
0|1|2|3|4-5-2-6|6
0|4|5|3|7-4-2-4|4
0|1|2|3|7-4-2-5|4
0|1|2|3|7-4-2-5|5
0|1|2|3|7-4-2-5|6
分割档3:
C1|C2|C3|C4|C5|C6
0|1|2|3|7-5-2-6|5
基于第5列,应为该列中的每3个唯一值拆分文件,甚至应包含重复第5列的值的所有行。有人可以帮我弄这个吗?
awk的工作。就像是:
awk -F'|' -v fileformat="/abc/output/file_%04d.txt" -v max=3 -v field=5 '
NR == 1 {header = $0; next}
! ($field in seen) {
seen[$field]
if (++n % max == 1) {
close(out)
out = sprintf(fileformat, ++f)
print header > out
}
}
{print > out}' < /abc/input/a.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句