[Obsolete]: CSVファイルの指定列を線形変換し出力するシェルスクリプト

shellscript
作者

Ryo Nakagami

公開

2026-05-11

更新日

2026-06-03

廃止済みシェルスクリプト

#!/bin/bash
: '
linear_convert - CSVファイルの指定列を線形変換し出力するスクリプト

Usage:
  ./linear_convert <a: slope> <b: intercept> <column_num> <precision> <input_csv_file> [na_replacement|keep]

Arguments:
  a               傾き(線形変換の倍率)
  b               切片(線形変換の加算値)
  column_num      変換対象の列番号(1始まり)
  precision       出力する小数点以下の桁数
  input_csv_file  入力CSVファイルのパス
  na_replacement  欠損値・非数値の置換文字列または"keep"(省略時は"keep")

Description:
  指定したCSVファイルの指定列の値に対して、線形変換 y = a * x + b を適用します。
  欠損値や数値でない値は、指定した文字列に置換するか、"keep"指定であればそのまま保持します。

Example:
  # 第3列を y=2.5*x + 10 に変換し、小数点2桁で出力。欠損値はそのまま保持。
  ./linear_convert.sh 2.5 10 3 2 input.csv

  # 欠損値を"Missing"に置換する場合
  ./linear_convert.sh 2.5 10 3 2 input.csv Missing
'

# --- 引数チェック ---
if [ "$#" -lt 5 ] || [ "$#" -gt 6 ]; then
  echo "Usage: $0 <a: slope> <b: intercept> <column_num> <precision> <input_csv_file> [na_replacement|keep]"
  echo "Example: $0 2.5 10 3 2 input.csv Missing"
  echo "na_replacement options: NA, Missing, 0, or keep (default: keep)"
  exit 1
fi

# --- 引数を変数に代入 ---
a="$1"
b="$2"
col="$3"
precision="$4"
input_file="$5"
na_replacement="${6:-keep}"   # 6番目の引数がなければ keep をデフォルトに

awk -F',' -v a="$a" -v b="$b" -v col="$col" -v prec="$precision" -v na="$na_replacement" '
BEGIN {
    OFS = ",";
    format = "%." prec "f";
}
NR == 1 {
    print $0;
}
NR > 1 {
    val = $col;
    if (val ~ /^[0-9.]+$/) {
        $col = sprintf(format, a * val + b);
    } else {
        if (na == "keep") {
            $col = val;   # 欠損・非数値はそのまま保持
        } else {
            $col = na;    # na_replacement で置換
        }
    }
    print $0;
}
' "$input_file"