アイキャッチ

実装・エラー解決

awkコマンドでシェル変数を使ってファイル出力する

この記事の内容

  • シェル変数に入った出力先へ、awkで抽出した列を書き出します。

ポイント

  • シェルの入出力リダイレクトでパスを渡します。パスに空白があっても1つの引数になるよう引用符で囲みます。

OKなパターン

例では、単純なカンマ区切りファイルから先頭4列を取り出します。出力先は呼び出し側で渡します。

sh export-columns.sh "${BASE_DIR}/data/user.csv" "${DIR}/data/user.csv"
#!/bin/sh
set -eu

if [ "$#" -ne 2 ]; then
    printf '%s\n' 'usage: sh export-columns.sh INPUT OUTPUT' >&2
    exit 2
fi

input=$1
output=$2
set -C
awk -F, 'BEGIN { OFS = "," } { print $1, $2, $3, $4 }' < "$input" > "$output"

< "$input" と > "$output" はシェルが処理します。awkは、どのパスを使うかに関係なく同じプログラムを実行します。set -C は既存の通常ファイルへの上書きを防ぎます。出力先の親ディレクトリは先に用意してください。

この例は値の中に引用符付きのカンマや改行を含まないデータ用です。時刻の換算も必要な場合は、列抽出とは別に値の単位と起点を決めます。

-実装・エラー解決
-