次のコードを取得して、ユーザーから変数を読み取ろうとしています。検索するファイル、検索文字列、出力用の空白と出力するフィールドの量が必要でした。
最初の問題はAWKコマンドにあります。「」(単一のスペース」や「\ t」などの有効な空白を入力すると、未終了の文字列と構文エラーが発生します。これは、複数のフィールドの出力を要求した場合にのみ発生します(それ以外の場合、空白は追加されません)の上)。
次に、検索文字列を使用する場合、GREPは少し扱いにくいようです。文字列全体を使用するには、変数の開始と終了に二重引用符を追加する必要がありました。
#!/bin/bash
#****************************************************
#Name: reportCreator.sh
#Purpose: Create reports from log files
#Author:
#Date Written: 11/01/2013
#Last Updated: 11/01/2013
#****************************************************
clear
#Determine what to search for
printf "Please enter input file name(s): "
read inputFile
printf "Please enter your search query: "
read searchQuery
printf "Please enter the whitespace character: "
IFS= read whitespace
printf "Please enter the amount of fields to be displayed: "
read fieldAmount
#Add quotation marks to whitespace and searchQuery
whitespace=\""$whitespace"\"
searchQuery=\""$searchQuery"\"
#Declare variables
declare -i counter=0
declare -a fields[$fieldAmount]
declare -a fieldInsert[$fieldAmount]
#While loop for entering fields
while [[ "$counter" -ne "$fieldAmount" ]]
do
#Ask for field numbers
printf "Please enter number for required field $((counter+1)): "
read fields[$counter]
((counter++))
done
#Create function to add '$' before every field and the whitespace characters
function fieldFunction
{
for (( counter=0; counter <= ($fieldAmount-1); counter++ ))
do
fieldInsert[$fieldAmount]="$""${fields[$counter]}"
if (( counter!=($fieldAmount-1) ))
then
printf "${fieldInsert[*]}$whitespace"
else
printf "${fieldInsert[*]}"
fi
done
}
printf "%b\n"
tac $inputFile | grep "$searchQuery" | less #| awk '{print $(fieldFunction)}'
exit 0
どんな助けでもいただければ幸いです。