![見出し画像](https://assets.st-note.com/production/uploads/images/45029421/rectangle_large_type_2_d203630c0784c9535af2ecc403dd5ece.png?width=800)
【シェルスクリプト】フォルダの中身を順に処理
こんにちは〜インフラエンジニアのtamolabです!
今日はシャルスクリプトについて書こうと思います!私はよく業務でデータ処理やログ解析でシェルスクリプトを利用します!そのデータ処理の際によく利用する処理を書きたいと思います。Excelだと簡単に処理できる内容ではありますが、Excelで処理するには時間がかかりすぎますし、大きいファイルだとExcelで開くことができません。(行数や列数に制限があります)私は過去に10億行のファイルを処理したときは、迷わずシャルスクリプトを利用してサーバ上で処理を行いました。
1. やりたいこと
フォルダ内のデータ(名前)を取得します。本記事ではフォルダ内ファイルの拡張子を.txtから.logに変更するループ文のシェルスクリプトを紹介します。
<実行前>
1.txt 2.txt 3.txt 4.txt 5.txt
<実行後>
1.log 2.log 3.log 4.log 5.log
2. コード紹介
現在のフォルダの状況は下記です。
$ ls
1.txt 2.txt 3.txt 4.txt 5.txt main.sh
実行文は下記になります。
#!/bin/sh
for filename in *.txt
do
mv ${filename} ${filename%.txt}.log
done
3. 実行例
# スクリプト 実行
sh main.sh
# 結果確認
$ ls
1.log 2.log 3.log 4.log 5.log main.sh
4. おまけ
何十万のデータに番号をつけたい場合も利用できますね。
for分の途中でカウンタを文字列付与すれば一気に大量のデータに番号をつけることもできます。
#!/bin/sh
cnt=1
for filename in *.txt;
do
mv ${filename} data_${cnt}.log;
#cnt変数のインクリメント
cnt=`expr ${cnt} + 1`
done
実行結果は下記です。
# スクリプト 実行
sh main.sh
# 結果確認
$ ls
data_1.log data_2.log data_3.log data_4.log data_5.log main.sh
5. キーワード
#シェルスクリプト #for文 #インクリメント #変数 #インフラエンジニア #ネットワークエンジニア #IT
6. お問い合わせ先
本投稿のコメントでも構いませんし、下記からお問い合わせいただいても大丈夫です。
note.tamolab@gmail.com
サポートをお願いいたしますmm もしXXXXな記事を書いて欲しい、XXXXな記事は不適切だなどのご要望がありましたら、お知らせください!