私の質問は大学で書くように頼まれたスクリプトに関するものなので、H / Wですが、詰まってまだ解決策が見つかりませんでした。
私は次のような主張を得ようとしています
./tool.sh -f persons.dat -id <id>
その人のデータを表示したいからです。
tool.sh
persons.dat
以下のような人事データを含むファイルであるマイプログラムです。
3601|Wang|Lin|male|1981-01-02|2010-03-14T19:06:18.373+0000|1.10.108.68|Firefox
id|lastName|firstName|gender|birthday|creationDate|locationIP|browserUsed
IDは2文字のフラグであり、手動で渡すことができるため、getoptsを使用できないことを知っていますが、場所を考慮しないように求められます。
./tool.sh -f persons.dat -id <id>
そして:
./tool.sh -id <id> -f persons.dat
同じ目的で使用する必要があります
どんなアイデアがありますか?
答え1
あなたの質問がこれら2つのオプションに制限されている場合は、次のようになります。
usage() {
echo "tools.sh -id <id> -f <file>"
echo "note: order of options is not important"
}
if [ $# -ne 4 ]; then
echo "Wrong number of arguments"
usage
exit 1
fi
if [ "$1" = "-f" -a "$3" = "-id" ]; then
file="$2"
id="$4"
elif [ "$1" = "-id" -a "$3" = "-f" ]
then
file="$4"
id="$2"
else
echo "Wrong syntax!"
usage
exit 1
fi
その後、awkを使用してファイルを解析できます。
awk -F'|' -v id="$id" '$1==id{printf "ID: "$1"\nUser: "$2" "$3"\nGender: "$4"\nBorn: "$5"\nCreation Date: "$6"\nLocation IP: "$7"\nBrowser used: "$8"\n"}' $file
if [ $? -eq 0 ]
then
exit 0
else
echo "Something went \"woopsie!\""
exit 1
fi
より良い結果を得るには、これが数値であり、実際にファイルのどこかにあることを確認することもできますid
。persons.dat
PATH
答え2
awk -F\| 'NR==1{
for(j=1;j<=NF;j++)
Arr[j]=$j;
next
}
{
printf("./tool.sh -f file --edit");
for(i=1;i<=NF;i++)
printf("%s %s ",Arr[i],$i)
}
{
printf("\n")
}' persons.dat