シェルスクリプト2

以下のようにスクリプトを修正し、引数で渡されたファイル名の一部と合致するファイルを検索して処理するようにします。このスクリプトでは、引数で指定されたファイル名の一部に合致するファイルをディレクトリ内で検索し、そのファイルを対象に検索処理を行います。

#!/bin/bash

# 検索対象のディレクトリ
DIRECTORY="/path/to/directory"

# コマンドライン引数のチェック
if [ "$#" -ne 4 ]; then
    echo "Usage: $0 <file1_part> <search_term1> <file2_part> <search_term2>"
    exit 1
fi

# コマンドライン引数の取得
FILE_PART1="$1"
SEARCH_STRING1="$2"
FILE_PART2="$3"
SEARCH_STRING2="$4"

# 一次ファイル
TEMP_FILE="/tmp/search_results.txt"

# 負けパーションファイルの検索
MATCHED_FILES1=$(find "$DIRECTORY" -type f -name "*$FILE_PART1*")
MATCHED_FILES2=$(find "$DIRECTORY" -type f -name "*$FILE_PART2*")

# 初期化
> "$TEMP_FILE"

# ファイル1で検索
for FILE in $MATCHED_FILES1; do
    echo "ファイル1(${FILE})の検索結果:" >> "$TEMP_FILE"
    grep -n "$SEARCH_STRING1" "$FILE" >> "$TEMP_FILE"
    COUNT=$(grep -c "$SEARCH_STRING1" "$FILE")
    if [ "$COUNT" -ge 2 ]; then
        echo "ファイル1の結果: 2行以上の結果が返されました" >> "$TEMP_FILE"
    fi
    echo "" >> "$TEMP_FILE"
done

# ファイル2で検索
for FILE in $MATCHED_FILES2; do
    echo "ファイル2(${FILE})の検索結果:" >> "$TEMP_FILE"
    grep -n "$SEARCH_STRING2" "$FILE" >> "$TEMP_FILE"
    COUNT=$(grep -c "$SEARCH_STRING2" "$FILE")
    if [ "$COUNT" -ge 2 ]; then
        echo "ファイル2の結果: 2行以上の結果が返されました" >> "$TEMP_FILE"
    fi
    echo "" >> "$TEMP_FILE"
done

# 結果を表示
cat "$TEMP_FILE"

# 一時ファイルを削除
rm "$TEMP_FILE"

修正内容

  1. 一部ファイル名に合致するファイル検索:
  • find "$DIRECTORY" -type f -name "*$FILE_PART1*" で、DIRECTORY 内の任意の場所で FILE_PART1 を含むファイル名を持つファイルを検索し、MATCHED_FILES1 に格納します。
  • 同様に、find "$DIRECTORY" -type f -name "*$FILE_PART2*"FILE_PART2 を含むファイル名を持つファイルを MATCHED_FILES2 に格納します。
  1. ファイル1での検索:
  • for FILE in $MATCHED_FILES1; do ループ内で見つかった各ファイルに対して検索処理を行います。
  • grep -n "$SEARCH_STRING1" "$FILE" で行番号付きで検索し、一時ファイルに出力します。
  • 検索結果の行数をカウントし、2行以上の場合はメッセージを追加します。
  1. ファイル2での検索:
  • 同様に、for FILE in $MATCHED_FILES2; do ループ内で見つかった各ファイルに対して検索処理を行います。
  • grep -n "$SEARCH_STRING2" "$FILE" で行番号付きで検索し、一時ファイルに出力します。
  • 検索結果の行数をカウントし、2行以上の場合はメッセージを追加します。

使用例

以下のようにコマンドライン引数を指定してスクリプトを実行します。

./script_name.sh file1_part search_term_1 file2_part search_term_2

このコマンドでは、DIRECTORY 内の file1_part を含むファイルに対して search_term_1 を検索し、file2_part を含むファイルに対して search_term_2 を検索します。

コメント

タイトルとURLをコピーしました