Bash

Bashでsplitみたいな処理

More than 1 year has passed since last update.

メモ書き。

引数で指定したファイルのレコードを1行づつデリミタで区切る処理。
(例はカンマ(,)区切)

読み込むファイル

test.txt
bokuha,hentai

シェル

split.sh
#!/bin/sh
filename=$1
IFS=','
while read line ; do
  set -- ${line}
  echo $1
  echo $2
done < ${filename}

実行結果

[xxx@xxx xxx]# ./split.sh test.txt
bokuha
hentai
[xxx@xxx xxx]#

説明(一応)

filename=$1
→引数1に指定したファイル名を変数に設定。

IFS=','
デリミタ変数IFSに','を設定。
IFSはBashのデリミタの環境変数。デフォルトだと"$'\n'$'\t' "(改行・タブ・半角スペース)が設定されている。

while read line ; do ~ done < ${filename}
ファイルを1行ずつ読み込み。
readコマンドはIFSの値で読んだ行を区切り変数に格納($1,$2,...)

補足

IFSはexportで定義しちゃうと(今回は関係ないけど)子プロセスに影響を与えちゃうので注意(用が済んだら戻す/必要なければシェル変数で)。