cygwin sortを使用してn番目の列でタブ区切りファイルをソートするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/426647

  •  06-07-2019
  •  | 
  •  

質問

タブで区切られた巨大なファイルがあり、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個ほど試しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top