cygwin sortを使用してn番目の列でタブ区切りファイルをソートするにはどうすればよいですか?
質問
タブで区切られた巨大なファイルがあり、2番目の列でソートします。 cygwinソートのフィールド区切り文字としてタブ文字を使用する必要があります。だから私はこのようなものが必要です:
sort -t \t -k 2,2 in.txt > out.txt
ただし、コマンドプロンプトはタブ文字としてではなく、文字通り「\ t」を評価します。 Cygwinを実行しているWindowsマシンでこれを行う必要があることに注意してください。
などのバリエーションsort -t "\t"
sort -t \"\t\"
動作しません。また、上記の\ tの代わりに実際のタブを持つcmdファイルにこれを入れません。
編集:DOSシェルまたはCygwin bashシェルのいずれかを使用したソリューションで問題ありません。
解決
私のマシン(Mac bashプロンプト、GNU sort ...)では、これは動作します:
sort -t ' ' -k 2,2 in.txt > out.txt
(引用符の間にある「本物の」タブ。)
そこでタブを取得するには、CTRL-V、TAB(CTRL-Vに続いてTAB)を入力します。
編集:Windowsマシンでcygwinプロンプトからテストしましたが、同じように動作します(予想どおり、bashはbashです)。
他のヒント
文字列の補間を有効にするには、\ tの前に$記号を追加する必要があります。そのため、タブは実際にソートに送信されます。これはどの端末でも動作するはずです:
sort -t \t' -k 2,2 in.txt > out.txt
Windowsコマンドプロンプトで最も簡単な解決策は、最初にタブ補完を無効にすることです。
cmd /f:off
その後、リテラルのタブ文字を入力できます。
WindowsでのGnuWin32ソートのソリューションが必要でしたが、上記のソリューションのいずれもコマンドラインで機能しませんでした。しかし、次のバッチファイル(.bat)は機能しました。二重引用符内にタブ文字を入力します。
C:> cat foo.bat
sort -k3 -t" " tabfile.txt
誰もがここで皮肉を見る?
タブ文字をタブにするには、フープをジャンプする必要があります...
Windowsコマンドプロンプトでは、次を使用して実行できました。
c:\ bin \ sort -t"(実際のタブ)"ただし、cmd / f:offを開始した後のみ(上記のヒントを参照)
Windowsのbatファイルでは、テキストエディター(notepad2 :-)がタブをスペースではなくタブとして挿入するように設定されていれば、同じことができました。
-t $ '\ t"を使用するための好評のヒントがいくつかあります。幸運や髪の毛を残さずに、この組み合わせを2 ^ 16個ほど試しました。