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