我们这里要求根据第3列分割文件
在第三列上,我们有 9 个唯一值,基于此我们需要分成 2 个文件 包含 4 个另一个文件包含剩余 5 个(它基于 3 列中唯一值的数量,如果我们有 20 个唯一值,我们将分成 10 和 10 ) 并且应该在两个文件上添加标题
我们将使用此命令计算唯一值的数量
awk -F'|' '{print $3}' inputfile.txt | uniq
数完如何放入2个文件后 一半的计数应该在一个文件中,剩余在另一个文件中
请为此建议一个脚本/cmd
输入文件
Header|Name|date
c|125|ER
de|126|ER
fr|127|ER
xe|128|ER
A|123|MR
b|124|MR
c|125|XR
de|126|YR
fr|127|ZR
xe|128|NR
A|123|BR
b|124|BR
c|125|CR
de|126|CR
fr|127|DR
xe|128|DR
A|123|ER
b|124|ER
输出文件1
Header |Name | date
c|125|ER
de|126|ER
fr|127|ER
xe|128|ER
A|123|ER
b|124|ER
A|123|MR
b|124|MR
c|125|XR
de|126|YR
fr|127|ZR
输出文件2
Header|Name|date
xe|128|NR
A|123|BR
b|124|BR
c|125|CR
de|126|CR
fr|127|DR
xe|128|DR
我认为在将唯一“值”分派到不同文件之前,您不需要计算它们的数量;当遇到新的“值”时,您可以切换输出文件:
awk -F '|' '
BEGIN {
output_files[1] = "outputfile1.txt"
output_files[2] = "outputfile2.txt"
}
NR == 1 {
for (i in output_files)
print > output_files[i];
next
}
{
if ( !($3 in arr) )
arr[$3] = file_no++ % 2 + 1;
print > output_files[arr[$3]]
}
END {
for (i in output_files)
close(output_files[i])
}
' inputfile.txt
顺便说一句,你的计数方式是错误的;它应该更像是:
awk -F'|' '{print $3}' inputfile.txt | sort -u | wc -l