Memory awk继续在旧文件而不是新文件上运行

Memory awk继续在旧文件而不是新文件上运行,memory,awk,cygwin,Memory,Awk,Cygwin,我正在Windows7上运行cygwin。我已经在文件1上运行了此oneliner,并尝试在文件2上运行它,但结果一直在为文件1而不是文件2提供结果。文件1和文件2位于单独的文件夹中,它们大约有500k行长 我该如何着手解决这个问题 文件1的第一行 awk 'NR==1 {n=$2} {; file =sprintf("chr1_50kb_%.5d", ($2-n)/50000); if (file !=last_file) {; close(last_file); last_file = f

我正在Windows7上运行cygwin。我已经在文件1上运行了此oneliner,并尝试在文件2上运行它,但结果一直在为文件1而不是文件2提供结果。文件1和文件2位于单独的文件夹中,它们大约有500k行长

我该如何着手解决这个问题

文件1的第一行

 awk 'NR==1 {n=$2} {; file =sprintf("chr1_50kb_%.5d", ($2-n)/50000); if (file !=last_file) {; close(last_file); last_file = file;}; print > file;}' file2
文件2的第一行

chr19 3000118 + 0 0 0 0
chr19 3000119 - 0 0 0 0
chr19 3000315 + 0 0 0 0
chr19 3000316 - 0 0 0 0
chr19 3000602 + 0 0 0 0
chr19 3000603 - 0 0 0 0
chr19 3000718 + 0 0 0 0
chr19 3000719 - 0 0 0 0
chr19 3000720 + 0 0 0 0
chr19 3000721 - 0 0 0 0
这似乎是文件1和2中$2重叠的结果,因为创建的最后一个文件(没有重叠的$2)具有我要查找的结果。

根据,打印重定向将删除输出文件的以前内容。请注意,您的file1和file2都将尝试重定向到相同的输出文件名($2位于相同的50000数字块中)。为了避免以这种方式丢失任何输入,我建议将“>”改为“>>”,这将附加到任何现有文件中。在这种情况下,您可能需要在两次运行之间删除(或清空)输出文件


再看一遍,也许你也应该把$1编码到文件名中?除非你想让那些chr19记录进入一个名为chr1\ux的文件中

最好的猜测是,
($2-n)/50000
返回相同的值,因此文件名相同。@AIG否我的意思是chr1\u 50kb\u00000的内容是在文件1上运行的代码的结果,当它应该运行时,给我文件2的结果可能是文件1与文件2的内容相同?
diff file1 file2
说了什么?(顺便说一句,
{
后面的分号是无用的,两者都是)@Jens如果我使用文件1和文件2,它们有不同的内容。但是文件的结果有相同的内容。无论我使用文件2还是文件3,它们都只是提供了我使用文件1得到的信息。我认为这可能是一个无效或内存转储需要的问题。我想你需要向我们展示文件1、文件2、文件3和文件4的标题。最好的答案是:ss是指file2中的$2与file2line#1的$2相差超过50000,即file2没有向00000文件提供任何输出。
chr1 3000573 + 0 0 1 0 1 0
chr1 3000574 - 0 0 0 0 0 0
chr1 3000725 + 1 0 1 0 2 0
chr1 3000726 - 0 0 0 0 0 0
chr1 3000900 + 1 1 0 1 1 2
chr1 3000901 - 0 0 0 0 0 0
chr1 3001345 + 1 0 1 0 2 0
chr1 3001346 - 1 0 0 0 1 0
chr1 3001393 + 0 0 0 0 0 0
chr1 3001394 - 2 0 1 0 3 0