3

system呼び出しを使用して tsv ファイルをソートするPerl スクリプトがあります。

system("sort -k8 -r -n -t \$'\t' in.txt > out.txt");

CentOS および SUSE Linux では問題なく動作します。しかし、Ubuntu では、エラーが発生します。

sort: multi-character tab `$\t'

異なるOSの問題により、引用の解釈が異なるようです。Perl で tsv ファイルをソートするためのシンプルだがより堅牢な方法はありますか?

4

1 に答える 1

3

通常、シェルを回避するために の配列呼び出しを使用しますsystemが、コマンドに I/O リダイレクトが含まれているため、処理が面倒です。OTOH ではsort、出力ファイルを で指定できます-o。名前付きファイルは入力の 1 つになる可能性があります (ただし、ここにはありません)。

my @cmd = ( "sort", "-k8", "-rn", "-t", "\t", "-o", "out.txt", "in.txt" );

system(@cmd);

シェルは呼び出されません。タブは壊れていません。-r-nオプションを 1 つにまとめました。必要に応じてそれらを別々にしておくか、(ピンチで)-k8オプションの後に追加することができます。

于 2012-04-03T02:53:29.247 に答える