この記事の内容
- シェル変数に入った出力先へ、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 は既存の通常ファイルへの上書きを防ぎます。出力先の親ディレクトリは先に用意してください。
この例は値の中に引用符付きのカンマや改行を含まないデータ用です。時刻の換算も必要な場合は、列抽出とは別に値の単位と起点を決めます。
