2016-05-31 10 views
0

ソートしたデータだけでコンテンツを並べ替えて既存のファイルを更新したいと思います。ファイルを並べ替えて

私がチェックしたときにcountry.csvファイルの内容は、私が使用しています

India,Australia 

コマンドはcountry.csvが空である、しかし、

tr , '\n' < country.csv | sort -n | paste -sd, - > country.csv 

です。

+0

... btw、 'sort -n'?サンプルデータには数値コンテンツがありません。 –

答えて

1

これが期待されている:パイプラインのセットアップは、パイプラインの内側前のプログラムは、主に(実行されている起こる - それは、同期ではありませんので、パイプラインの早期部品の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に制限があります。出力ファイルをグループまたはワールドにアクセスできるようにするには、これらのファイルを自分で更新する必要があります。

関連する問題