10

我有一个巨大的制表符分隔文件,我想在其第二列进行排序。我需要使用制表符作为 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 的解决方案很好。

4

5 回答 5

14

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

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

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

要在此处获取选项卡,我键入 CTRL-V、TAB(CTRL-V 后跟 TAB)。

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

于 2009-01-09T01:06:39.773 回答
13

您需要在 \t 前面添加一个 $ 符号以打开字符串插值,因此选项卡实际上会被发送到排序。这应该适用于任何终端:

sort -t $'\t' -k 2,2 in.txt > out.txt
于 2009-07-17T12:14:37.100 回答
1

在 Windows 命令提示符中,我发现的最简单的解决方案是首先禁用制表符补全:

cmd /f:off

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

于 2011-04-02T08:00:18.040 回答
0

我想要一个在 Windows 上进行 GnuWin32 排序的解决方案,但上述解决方案都没有在命令行上为我工作。但是以下批处理文件(.bat)可以正常工作,这正是我想要的。在双引号内键入制表符。

C:>cat foo.bat

排序 -k3 -t" " tabfile.txt

于 2014-06-11T22:50:56.507 回答
0

有人看到这里的讽刺吗?
您必须跳过箍才能使制表符成为制表符...

在Windows命令提示符下,我可以使用:
c:\bin\sort -t"(actual tab)" 但只有在启动 cmd /f:off(如上所述)

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

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

于 2015-09-15T16:37:26.963 回答