我有一个巨大的制表符分隔文件,我想在其第二列上排序。我需要使用制表符作为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的解决方案很好。
答案 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种组合,没有运气或留着头发。