2017-10-10 7 views
0

私はファイルを持っています。それぞれの行には、支払いを超える顧客のファイルを作成するためにテンプレートファイルに代入される新しい顧客情報(電子メール、名前、タイトル、請求書)が含まれています。私が持っている問題は、?????がどこにあるかです。私は顧客の電子メールを使用して名前を付けられたファイル名に出力をリダイレクトしたい、今まで私はそれを行うことができませんでした。私はこれについてどうやって行くのか分かりません、私は複数のことを試みましたが、うまくいきませんでした。別のファイルのテキストを使用してファイルに名前を付けるにはどうすればよいですか?

1 #!/bin/bash 
    2 set -e 
    3 
    4 if [ "$#" -ne 1 ]; then 
    5  echo "Illegal number of parameters. Usage;./test1.bash <mm/dd/yyyy>" 
    6  exit 1 
    7 fi 
    8 
    9 OUTPUT_DIR="Emails" 
10 details="p4Customer.txt" 
11 template="template.txt" 
12 date=$1 
13 if [ ! -d "$OUTPUT_DIR" ]; then 
14  mkdir -p "$OUTPUT_DIR" 
15 fi 
16 
17 gawk -f g2.awk -v date="$date" "$details" | while read detail; 
18 do 
19  sed "$detail" "$template" > "OUTPUT_DIR/??????" 
20 done; 

awkのファイル

1 BEGIN{ FS=",";} 
    2 { 
    3  email=$1; 
    4  fullname=$2; 
    5  title=$3; 
    6  n=split(fullname,A," "); 
    7  name=A[n]; 
    8  amount_owed=$5; 
    9  if($5>$4){ 
10   printf "s_EMAIL_%s_;s_FULLNAME_%s_;s_TITLE_%s_;s_NAME_%s_;s_AMOUNT_%s_;s_DATE_%s_\n" , email, fullname, title, name, amount_owed, date; 
11  } 
12 } 
13 END{} 

答えて

1

あなたは17行にgawkコマンドの周りに別のループを入れてみてください、あなたに$detailsファイルの最初のフィールドを与えるcutコマンドを使用する場合があります。したがって、bashスクリプトの17〜20行目は、次のように置き換えられます。

# assume the first field is the email 
for email in `cut -d, -f 1 $details`; 
    do 
    gawk -f g2.awk -v date="$date" "$details" | while read detail; 
    do 
    sed "$detail" "$template" > "OUTPUT_DIR/$email" 
    done; 
done;