ソートしたデータだけでコンテンツを並べ替えて既存のファイルを更新したいと思います。ファイルを並べ替えて
私がチェックしたときにcountry.csv
ファイルの内容は、私が使用しています
India,Australia
コマンドはcountry.csv
が空である、しかし、
tr , '\n' < country.csv | sort -n | paste -sd, - > country.csv
です。
ソートしたデータだけでコンテンツを並べ替えて既存のファイルを更新したいと思います。ファイルを並べ替えて
私がチェックしたときにcountry.csv
ファイルの内容は、私が使用しています
India,Australia
コマンドはcountry.csv
が空である、しかし、
tr , '\n' < country.csv | sort -n | paste -sd, - > country.csv
です。
これが期待されている:パイプラインのセットアップは、パイプラインの内側前のプログラムは、主に(実行されている起こる - それは、同期ではありませんので、パイプラインの早期部品のexecve
呼び出しは、まだしばらく時間が起こってすることができない状況があります後者の部分のリダイレクトは完全ではありません)、あなたの>country.csv
はファイルの内容が読み込まれる前に消去されます。
別の出力ファイルに書き込んで名前を変更します。
です:
#!/bin/bash
# ^^^^- to let us use the below safety feature:
set -o pipefail # bashism: fail the whole pipeline if any component fails
tempfile=$(mktemp country.csv.XXXXXX)
if tr , '\n' <country.csv | sort -n | paste -sd, - >"$tempfile"; then
mv "$tempfile" country.csv
else
rm -f "$tempfile"
fi
mktemp
の使用は、本の複数のインスタンスを同時に実行できることが保証され、それぞれが独自の一時ファイルを持っています - ので、彼らはそれぞれが破損することはありません他の人の仕事 - と同様にいくつかのセキュリティ脆弱性(symlink攻撃など)に対する抵抗を伝えます。
制限ファイルのアクセス許可を設定する場合は、mktemp
に制限があります。出力ファイルをグループまたはワールドにアクセスできるようにするには、これらのファイルを自分で更新する必要があります。
... btw、 'sort -n'?サンプルデータには数値コンテンツがありません。 –