Bashスクリプトを使用したファイルの並べ替え

Bashスクリプトを使用したファイルの並べ替え

この記事を読んでくれてありがとう。私はbashに初めて触れたので、次のアドバイスが必要です。

2つの列を含むファイルを読み取るbashスクリプトを作成したいと思います。

f  2
g  1
s  4
d  5
f  2
g  5
d  9
g  10
h  1
s  5
d  29

私のスクリプトは実際に最初の列(アルファベット)に基づいてファイルをソートし、という名前のファイルを生成し、数字で同じことを行い、alpha_sorted.txt名前を付けたいと思いますnumbers_sorted.txt

私はこの分野に慣れていないので、可能であればあなたの助けを求めたいと思い、文書やリンクを提供したり、コードの助けを得たいと思います。

このスクリプトは初級レベルの使用のためであるため、アプローチを複雑にすることはお勧めできません。

修正する

john1024の答えを使用して、次の問題が発生しました。

Hasan@HasanChr /cygdrive/c/users/Hasan/Desktop/Bash
$ chmod +x script.sh

Hasan@HasanChr /cygdrive/c/users/Hasan/Desktop/Bash
$ ./script.sh
cat: alpha_sorted.txt: No such file or directory

スクリーンショットscript.sh

ここに画像の説明を入力してください。

ベストアンサー1

この記事がに投稿されて以来Unix.stackexchange.com、一般的なUNIXツールにアクセスできるとします。

最初の列はアルファベット順に並べられます。

$ sort file.txt >alpha_sorted.txt
$ cat alpha_sorted.txt
d  29
d  5
d  9
f  2
f  2
g  1
g  10
g  5
h  1
s  4
s  5

数値ソート:

$ sort -nk2,2 file.txt >numbers_sorted.txt
$ cat numbers_sorted.txt
g  1
h  1
f  2
f  2
s  4
d  5
g  5
s  5
d  9
g  10
d  29

-n数値ソートを指定します。 -k2,2ソートする2番目の列を指定します。

詳細についてはを参照してくださいman sort

メモ帳を使用してUnixスクリプトを編集するときに発生する問題

DOS行の終わりにスクリプトを作成しました。

$ cat dos.sh
sort file.txt >alpha_sorted.txt
cat alpha_sorted.txt 

見えませんが、コマンドの最後にスペースを追加しましたcat。このファイルを使用すると、表示されるエラーを再現できます。

$ chmod +x dos.sh
$ dos.sh
cat: alpha_sorted.txt: No such file or directory
: No such file or directory

dos2unixまたはなどのユーティリティを使用してこの問題を解決できますtr。使用tr:

$ tr -d '\r' <dos.sh >fixed.sh
$ chmod +x fixed.sh

これで、次のコマンドを正常に実行できます。

$ fixed.sh
d  29
d  5
d  9
f  2
f  2
g  1
g  10
g  5
h  1
s  4
s  5

おすすめ記事