csvファイルの指定したカラムの空白文字を変換する

csvファイルで指定したカラム内の値がファイル名でWindowsだと良いのですが、Linuxだと良くないので半角の空白をアンスコ(_)やハイフン(-)に変換したくて、シェルスクリプトで頑張って色々とやってみましたがうまくいきませんでした

bashだと駄目ぽいのPerlで、csvファイルの指定したカラムの値に空白文字がある場合に、アンスコ(_)に変換するプログラムを下記のように作りました

$ vim replace_space.pl

#!/usr/bin/perl -i

use strict;
use warnings;

while (<>) {
  my @fields = split /,/, $_, -1;

# 5番目のフィールドに空白が含まれている場合、アンダースコアに置換
  $fields[4] =~ s/ /_/g if defined $fields[4];

  print join(',', @fields);
}
  • $fields[4] の括弧内の箇所がカラムの番号になるので、その値を変更すれば任意のカラムの箇所に変更できます
  • s/ /_/g の(_)の箇所が変換したい文字ですので、ハイフン等にも変更すればハイフンに変換されます

これをターミナルから呼び出して実行します

# 書式: perl replace_space.pl [変換したいcsvファイル名]
perl replace_space.pl file.csv

指定したファイルの5つ目のカラムの値で、半角空白があれば、(_) に変換して、読みだしたcsvファイルに上書きで保存します
シェルスクリプト内で読み出されるので、自分の場合は、変換前にバックアップを取ってから、半角空白があれば、(_) に変換しています

#!/bin/bash

# 入力するCSVファイルを指定
input_file="file.csv"

# CSVファイルのバックアップファイル名
backup_file="$input_file.bak"

# バックアップファイルを作成
cp "$input_file" "$backup_file"

# 空白を(_)に変換するperlを実行
perl replace_space.pl "$input_file"

 

 

スポンサーリンク

0
0