見出し画像

【シェルスクリプト】フォルダの中身を順に処理

 こんにちは〜インフラエンジニアの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. コード紹介

画像3

現在のフォルダの状況は下記です。

$ 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. キーワード

画像2

#シェルスクリプト #for文 #インクリメント #変数 #インフラエンジニア #ネットワークエンジニア #IT

6. お問い合わせ先

画像1

 本投稿のコメントでも構いませんし、下記からお問い合わせいただいても大丈夫です。
 note.tamolab@gmail.com

サポートをお願いいたしますmm もしXXXXな記事を書いて欲しい、XXXXな記事は不適切だなどのご要望がありましたら、お知らせください!