2

基本的に、並べ替えた後、列をタブで区切る必要があります。現在、2 つのスペースで区切られています。マニュアルページには、出力フォーマットに関連するものは何もありませんでした (少なくとも私はそれに気づきませんでした)。

それが不可能な場合は、 awk を使用してソートして印刷する必要があると思います。より良い代替手段はありますか?

編集: 質問を明確にするために、二重スペースの位置は一貫していません。私は実際に次のようなデータを持っています:

<date>\t<user>\t<message>.

次のように、年、月、日、時刻で日付で並べ替えます

Wed Jan 11 23:44:30 CST 2012

次に、元のファイルのようにソートされたデータを出力します。

<date>\t<user>\t<message>.

EDIT 2:タブのテストが間違っていたようです。私は生の行をbashからWindowsボックスにコピーして貼り付けていました。そのため、スペースが表示される代わりにタブとして認識されませんでした。ファイル全体を Windows にダウンロードしたところ、フィールドがタブで区切られていることがわかります。

また、並べ替え後の新しいファイルでも、フィールドの区切り (\t \n 、: ; など) が同じであることがわかりました。つまり、元のファイルにタブ区切りのフィールドがある場合、ソートされたファイルもタブ区切りになります。

最後に、「正しい」答えは、問題に対する正確な解決策ではありませんでした。自分のスレッドにコメントして正しいとマークできるかどうかわかりません。それでよろしければ、教えてください。

コメントありがとうございます。本当にありがとうございました!

4

3 に答える 3

5

出力を列にパイプします。

sort <whatever> | column -t -s\t

于 2012-06-13T02:50:09.757 に答える
2

sedを使用できます:

 sort data.txt  | sed 's/  /\t/g'
                         ^^
                         ||
                      2 blank spaces

これにより、並べ替え操作の出力が取得され、2 つの連続する空白が 1 つのタブに置き換えられます。

于 2012-06-13T03:08:22.603 に答える
2

私が理解したことから、ファイルはすでにソートされており、必要なのは2つの区切りスペースをTAB文字に置き換えることです。その場合、次を使用します。

sed 's/ /\t/g' < sorted_file > new_formatted_file

(正規表現の 2 つのスペースを正しくコピー/貼り付けするように注意してください)

于 2012-06-13T03:05:37.107 に答える