
端末で2番目の列に基づいてファイルをソートする方法ファイルの内容は次のとおりです。
Nome Note
------------
Mehdi 0
Sunday 20
Others 10
Shnou 5
使用してsort -t' ' -nk2
も正しい結果が出ません。また、ファイルの内容がソートされたままになるようにするにはどうすればよいですか?
答え1
私の考えであなたが望むのはこれです:
方法#1:頭と尾を使う
$ (head -n 2 sample.txt; tail -n +3 sample.txt | sort -t' ' -nk2) > a.tmp && mv a.tmp sample.txt
Nome Note
------------
Mehdi 0
Shnou 5
Others 10
Sunday 20
これにより、テキストファイルの最初の行をインポートし、最初の2行以降のすべての項目をインポートしてソートします。
方法 #2: ヘッダーのみを使用
$ (head -n 2; sort -t' ' -nk2) < sample.txt > a.tmp && mv a.tmp sample.txt
Nome Note
------------
Mehdi 0
Shnou 5
Others 10
Sunday 20
テキストファイルを入力として使用して、最初の行のみを表示し、残りの行を並べ替えます。
ファイルを適切に編集するのは一般的に良い考えではありません。可能ですが、中間ファイルを使用する方が良いです。
方法#3:中間ファイルなしで#2を実行する
@StephaneChazelasのアイデアを借りて、 "1 <>"表記を使用してファイルを読み書きするために開くことができますsort
。
$ (head -n 2; sort -nk2) < sample.txt 1<> sample.txt
Nome Note
------------
Mehdi 0
Shnou 5
Others 10
Sunday 20
答え2
現在の場所にあるファイルを上書きするには、次のようにします。
{
head -n 2 &&
sort -k2n
} < the-file.txt 1<> the-file.txt
sort
これは、出力の書き込みを開始する前に入力を完全に読み取って読み取っているファイルに書き込むことができるために機能します。そして、出力は入力と同じサイズなので、最終的にファイルを切り捨てる必要はありません。
デフォルトの区切り文字の代わりに使用すると、-t' '
入力の各空白文字が新しいフィールドを生成します。たとえば、次のようになります。
a 10
b 2
(前に1マスa
、後に2マスがありますb
)、-t' ' -nk2
(覚えておいてください-k2
。フィールド2から行末まで-k2,2
と同時にフィールド2万)のみが数字"a 10"
と" 2"
比較されますが、単独-nk2
で数字" 10"
と" 2"
比較されます(数字比較では先行スペースは無視されます)。
答え3
ファイルの2つの部分を並べ替える必要があります。他の答えから大きくインスピレーションを得た拡張答えは次のとおりです。
ファイル.txt
Nome Note
------------
Mehdi 0
Sunday 20
Others 10
Shnou 5
Example
------------
Foo
bar
Baz
Results: Finished!
複数のセクションをリンクして並べ替えることも、接続せずに別のオプションで並べ替えることもできます。最後のステップでcat
ソートされていないチャンクがすべて出力されます。
(head -n 2; head -n 4 | sort -nk2 ; head -n 3; head -n 3 | sort; cat ) < file.txt 1<> sorted.txt
ソート.txt
Nome Note
------------
Mehdi 0
Shnou 5
Others 10
Sunday 20
Example
------------
bar
Baz
Foo
Results: Finished!