Awk 在特定数量的唯一条目之后拆分文件

Awk 在特定数量的唯一条目之后拆分文件,awk,terminal,Awk,Terminal,给定以制表符分隔的文件: A 12380 A 123801 A 1209 A 2035 A 4930 A 2903 B 2085 B 203801 B 240083 B 12308 B 12399 C 120303 C 1238058 C 235 D 55674 D 99683 D 2391095 D 12958 D 23804 D 5769 E 479903 E 28075 E 2310 E 678

给定以制表符分隔的文件:

A   12380
A   123801
A   1209
A   2035
A   4930
A   2903
B   2085
B   203801
B   240083
B   12308
B   12399
C   120303
C   1238058
C   235
D   55674
D   99683
D   2391095
D   12958
D   23804
D   5769
E   479903
E   28075
E   2310
E   6784
F   4789
F   23458
F   8976
G   9007
H   1203
H   12909
我想在看到一定数量的唯一条目后拆分它-从特定列中。例如,在第一列中每3个唯一条目之后拆分上述文件。生成3个文件:

A   12380
A   123801
A   1209
A   2035
A   4930
A   2903
B   2085
B   203801
B   240083
B   12308
B   12399
C   120303
C   1238058
C   235

D   55674
D   99683
D   2391095
D   12958
D   23804
D   5769
E   479903
E   28075
E   2310
E   6784
F   4789
F   23458
F   8976

G   9007
H   1203
H   12909
到目前为止,我有:

awk -F"\t" 'BEGIN { count=0; filename=1 }; x[$1]++==0 {count++}; count==3 { count=1; filename++}; {print >> filename".txt"; close(filename".txt");}' file
但是,在终端上运行此操作时,我得到错误:

awk: syntax error at source line 1
 context is
    BEGIN { count=0; filename=1 }; x[$1]++==0 {count++}; count==4 { count=1; filename++}; {print >> >>>  filename".txt" <<< 
awk: illegal statement at source line 1
awk:源代码第1行出现语法错误
上下文是

开始{count=0;filename=1};x[$1]+==0{count++};count==4{count=1;filename++};{print>>>>filename“.txt”请尝试以下内容(使用给定的样本进行测试)

说明:



编辑:要将输出放入输出文件,请尝试以下操作

awk -v count=1 -v file_count=1 '
BEGIN{
  file=file_count".txt"
}
prev!=$1 && prev{
  count++
  delete a[prev]
}
count==4 && !a[$1]++{
  count=1
  close(file)
  file_count++
  file=file_count".txt"
}
{
  prev=$1
}
{
  print $0 > (file)
}
'   Input_file

你能试试下面(用给定的样品测试)吗

说明:



编辑:要将输出放入输出文件,请尝试以下操作

awk -v count=1 -v file_count=1 '
BEGIN{
  file=file_count".txt"
}
prev!=$1 && prev{
  count++
  delete a[prev]
}
count==4 && !a[$1]++{
  count=1
  close(file)
  file_count++
  file=file_count".txt"
}
{
  prev=$1
}
{
  print $0 > (file)
}
'   Input_file

@Cyrus Okay-Updated。@Cyrus Okay-Updated。@Annashumann,您需要打印值还是需要输出文件中的值?请确认,如果需要输出文件,那么应该有什么名称?是-我需要输出文件中的值。简单编号为“1.txt”“2.txt”“3.txt”等等。@Annashumann,其中1.txt应该有前3个唯一值t?@Annashumann,请尝试我的编辑命令,然后告诉我。@Annashumann,您需要打印值还是需要输出文件中的值?请确认,如果需要输出文件,那么应该有什么名称?是-我需要输出文件中的值。简单编号为“1.txt”“2.txt”“3.txt”等等。@Annashumann,其中1.txt应该有第一个3个唯一值对吗?@Annashumann,请尝试我的编辑命令,然后告诉我。
awk -v count=1 -v file_count=1 '
BEGIN{
  file=file_count".txt"
}
prev!=$1 && prev{
  count++
  delete a[prev]
}
count==4 && !a[$1]++{
  count=1
  close(file)
  file_count++
  file=file_count".txt"
}
{
  prev=$1
}
{
  print $0 > (file)
}
'   Input_file
$ awk '$1!=(p""){p=$1;u++}
  u>3{close(n++".txt");u=1}
  {print >(n".txt")}' n=1 file
$ cat 1.txt
A   12380
A   123801
A   1209
A   2035
A   4930
A   2903
B   2085
B   203801
B   240083
B   12308
B   12399
C   120303
C   1238058
C   235
$ cat 2.txt
D   55674
D   99683
D   2391095
D   12958
D   23804
D   5769
E   479903
E   28075
E   2310
E   6784
F   4789
F   23458
F   8976
$ cat 3.txt
G   9007
H   1203
H   12909