複数の.csvログファイルを消去しますが、ヘッダーを保持してください。

複数の.csvログファイルを消去しますが、ヘッダーを保持してください。

最上位ディレクトリの2つのサブディレクトリにいくつかの.csvログファイルがあり、各ディレクトリ内のすべての.csvログファイルを空にしますが、ヘッダーを維持してそのファイルを作成したアプリケーションがファイルを再入力できるようにします。

これを使用してファイルを空にすることができますが、for file in /path/to/file/*; do > $file;doneヘッダも削除されます!

ベストアンサー1

tmpfile=$( mktemp )

for pathname in /path/to/dir/*.csv; do
    head -n 1 "$pathname" >"$tmpfile"
    cat "$tmpfile >"$pathname"
done

rm "$tmpfile"

つまり、head -n 1一時ファイルを使用してヘッダーを抽出し(最初の行であると仮定)、元のファイルを切り取り、一時ファイルからヘッダーを挿入します。

ヘッダーがすべてのファイルでまったく同じ場合:

tmpfile=$( mktemp )
set -- /path/to/dir/*.csv

head -n 1 "$1" >"$tmpfile"

for pathname do
    cat "$tmpfile" >"$pathname"
done

rm "$tmpfile"

まず、位置パラメータを目的のファイルのリストに設定し、最初のファイルからヘッダーを抽出します。このループは位置パラメータ(CSVファイル)を繰り返し、各パラメータを切り取り、タイトルを挿入します。

上記の2つの例では、パターンが一致すると仮定/path/to/dir/*.csvします。みんな影響を受けるファイル。実際のパターンの実際の例は次のとおりです。

/var/log/myprogram/dir1/*.csv /var/log/myprogram/dir2/*.csv

または中かっこ拡張をサポートするシェルを使用している場合:

/var/log/myprogram/{dir1,dir2}/*.csv

おすすめ記事