はい、日本語でブログ記事形式に書き直します。
Bashスクリプトでファイルの行数を計算する方法
今回は、ソースコードの行数を数える必要があり、スクリプトを作成してみました。その内容を共有していきたいと思います。
スクリプトの概要
このスクリプトは以下の作業を行います。
- ファイルパスのリストを読み込みます。(file_list.txt)
- 各ファイルの行数を計算します。
- 結果をCSVファイルに保存します。
では、スクリプトを詳しく見ていきましょう。
スクリプトコード
#!/bin/bash
# 入力ファイル(ファイルパスのリスト)
input_file="file_list.txt"
# 結果を保存するCSVファイル
output_file="line_count_results.csv"
# CSVヘッダーの作成
echo "File Path,Line Count" > $output_file
# ファイルリストを読み込み、各ファイルの行数を計算
while IFS= read -r file_path
do
# ファイルパスから引用符を削除(Excelからコピーした時に引用符が含まれる可能性があるため)
file_path=$(echo $file_path | sed "s/^\"//;s/\"$//")
if [ -f "$file_path" ]; then
# ファイルが存在する場合、行数を計算
line_count=$(wc -l < "$file_path")
echo "$file_path,$line_count" >> $output_file
else
# ファイルが存在しない場合
echo "$file_path,File not found" >> $output_file
fi
done < "$input_file"
echo "Results saved to $output_file"
コードの説明
- 入力と出力ファイルの設定
input_file="file_list.txt"
output_file="line_count_results.csv"
入力ファイル(file_list.txt)には分析するファイルのパスが列挙されており、結果はline_count_results.csvに保存されます。
- CSVヘッダーの作成
echo "File Path,Line Count" > $output_file
結果のCSVファイルの最初の行に列タイトルを追加します。
- ファイルリストの読み込みと処理
while IFS= read -r file_path
do
# 処理ロジック
done < "$input_file"
whileループを使用して入力ファイルの各行を読み込みます。
- 引用符の削除
file_path=$(echo $file_path | sed "s/^\"//;s/\"$//")
ファイルパスの先頭と末尾の引用符を削除します。これはExcelからコピーしたパスに引用符が含まれる可能性があるためです。
- ファイルの存在確認と行数計算
if [ -f "$file_path" ]; then
line_count=$(wc -l < "$file_path")
echo "$file_path,$line_count" >> $output_file
else
echo "$file_path,File not found" >> $output_file
fi
ファイルが存在する場合はwc -lコマンドで行数を計算し、存在しない場合は”File not found”と表示します。
- 結果の保存確認
echo "Results saved to $output_file"
スクリプト実行完了後、結果ファイルのパスを出力します。
使用方法
file_list.txtファイルに分析したいファイルのパスを1行に1つずつ列挙します。- スクリプトを実行します:
bash script_name.sh - 結果は
line_count_results.csvファイルで確認できます。
結論
このスクリプトを使用すると、多数のファイルの行数を迅速かつ効率的に計算できます。プロジェクト分析、コードレビュー、または単にファイルサイズを把握するのに役立ちます。
より複雑な分析が必要な場合は、このスクリプトをベースに拡張して追加機能を実装することができます。例えば、特定のファイルタイプのみを選択したり、コメントを除いた実際のコード行のみを計算したりする機能を追加することができます。
最後に
スクリプトを作成することが初めてでもあり、条件分岐(if-else)で最後にfiをつけることを忘れて、ハマっちゃったり、色々動かすのに時間がかかりましたが、目的達成や作業コストを減らせたと思って嬉しいです。(もちろんいろんなツールなどあるかと思いますが、状況に応じては直接に作らないと。)
