晴耕雨読

working in the fields on fine days and reading books on rainy days

awkでCSVのN番目の列だけを置換する

CSVのN番目の列だけを置換する方法について説明します。 LinuxのBashでCSVのN番目の列だけを置換するには、awkコマンドを使います。

awk -F "," '{OFS=","; gsub(/置換前/, "置換後", $N); print $0}' ファイル名


CSVのN番目を置換する

例えば、データがカンマ(,)で区切られているCSVファイルに対して、6列目の内容を空白に置き換えたい場合は、以下のシェルスクリプトを実行します。

for filename in *.csv; do
  awk -F "," '{OFS=","; gsub(/.*/, "", $6); print $0}' "$filename" > "$filename.replaced.csv"
done

awkコマンドを使って、-F(入力時の区切り文字)とOFS変数(出力時のフィールド区切り文字)の両方にカンマ(,)を指定します。 各行は { } の中で評価されるため、gsub関数を使って、6番目の内容 $6 を正規表現で置換します。 最後に置換済みの全体の内容 $0 を print で出力します。

タブ区切りのN番目を置換する

例えば、データがタブで区切られているDATファイルに対して、6列目の内容を空白に置き換えたい場合は、以下のシェルスクリプトを実行します。

for filename in *.dat; do
  awk -F "\t" '{OFS="\t"; gsub(/.*/, "", $6); print $0}' "$filename" > "$filename.replaced.dat"
done

awkコマンドを使って、-F(入力時の区切り文字)とOFS変数(出力時のフィールド区切り文字)の両方にタブ(\t)を指定します。

以上です。