awk到出现次数然后分成两个文件

时间:2015-02-10 14:38:12

标签: awk

想要计算基于$ 2字段的出现次数,然后将输入文件拆分为两个输出文件, 如果$ 2字段出现超过3次,那么这些行重新进入OpFile11.txt,否则重定向到OpFile22.txt

Input.csv

Des1,Location,Decs2
aaa,a123,xxx
bbb,b789,yyy
xxx,a123,aaa
aaa,a123,xxx
bbb,b789,yyy
ccc,c567,zzz
xxx,a123,aaa
ddd,d456,ddd

OpFile11.txt

aaa,a123,xxx
xxx,a123,aaa
aaa,a123,xxx
xxx,a123,aaa

OpFile22.txt

bbb,b789,yyy
bbb,b789,yyy
ccc,c567,zzz
ddd,d456,ddd

步骤1:计算出现次数:

awk -F, '{key=$2;++a[key]} END {for(i in a) print i","a[i]}' Input.csv 

d456,1
b789,2
c567,1
a123,4

步骤2:将输入文件分成两部分:

awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1]=$0;next} ($2 in a) { print $0 }' OccurGR3.csv Input.csv > OpFile11.txt
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1]=$0;next} !($2 in a) { print $0 }' OccurGR3.csv Input.csv > OpFile22.txt

其中OccurGR3.csv

a123,4

请建议避免三个步骤,寻找您的建议!!!

1 个答案:

答案 0 :(得分:1)

awk -F, '
NR==FNR { cnt[$2]++; next }
{ print > ( "OpFile" (cnt[$2]<3?22:11) ".txt" ) }
' Input.csv Input.csv