如何使用cygwin sort对第n列上的制表符分隔文件进行排序?

时间:2009-01-09 00:38:57

标签: sorting cygwin

我有一个巨大的制表符分隔文件,我想在其第二列上排序。我需要使用制表符作为cygwin排序中的字段分隔符。所以我需要这样的东西:

sort -t \t -k 2,2 in.txt > out.txt

但是命令提示符按字面意思评估'\ t'而不是标签字符。请注意,我需要在运行Cygwin的Windows机器上执行此操作。

等变体
sort -t "\t"
sort -t \"\t\"

不起作用,也不会将其放在带有实际标签的cmd文件中,而不是上面的\ t。

编辑:使用DOS shell或Cygwin bash shell的解决方案很好。

5 个答案:

答案 0 :(得分:14)

在我的机器上(Mac bash提示符,GNU排序......),这有效:

sort -t '   ' -k 2,2 in.txt > out.txt

(引号之间的“真实”标签。)

要获取标签,请输入CTRL-V,TAB(CTRL-V后跟TAB)。

编辑:我现在已经在cygwin提示符下的Windows机器上对它进行了测试,它的工作方式与此相同(正如我预期的那样,bash是bash)。

答案 1 :(得分:12)

你需要在\ t前面添加一个$符号来打开字符串插值,这样实际上标签会被发送到排序。这应该适用于任何终端:

sort -t $'\t' -k 2,2 in.txt > out.txt

答案 2 :(得分:1)

在Windows命令提示符中,我找到的最简单的解决方案是首先使用以下命令禁用制表符完成:

cmd /f:off

然后您可以输入文字制表符。

答案 3 :(得分:0)

我想在Windows上使用GnuWin32排序解决方案,但上述解决方案都没有在命令行上为我工作。但是下面的批处理文件(.bat)工作正是我想要的。在双引号中键入制表符。

C:> cat foo.bat

sort -k3 -t" " tabfile.txt

答案 4 :(得分:0)

有人在这里看到讽刺吗? 你必须通过箍来使标签字符成为标签...

在Windows命令提示符下,我能够使用:
c:\ bin \ sort -t"(实际标签)"但只有在启动cmd / f:off后(如上所示)

在Windows bat文件中,只要文本编辑器(notepad2 :-)设置为将选项卡作为选项卡而不是空格插入,我就可以执行相同的操作。

有一些很受欢迎的提示可以使用-t $' \ t"但我尝试了大约2 ^ 16种组合,没有运气或留着头发。