這是我的shell腳本,它從stdin接收用戶輸入的字符串。awk如何區分參數和輸入文件?
#!bin/sh
printf "Enter your query\n"
read query
cmd=`echo $query | cut -f 1 -d " "`
input_file=`echo $query | cut -f 2 -d " "`
printf $input_file
if [ $input_file = "" ]
then
printf "No input file specified\n"
exit
fi
if [ $cmd = "summary" ]
then
awk -f summary.awk $input_file $query
fi
比方說,他進入
summary a.txt /o foo.txt
現在cmd
變量將採取價值summary
和input_file
將採取a.txt
。 這不正確嗎?
我想summary.awk根據$query
中的內容在$input_file
上工作。
我的理解如下:
的第一個命令行參數傳遞被視爲輸入文件。 例如:如果輸入文件是管道
awk 'code' file arg1 arg2 arg3
僅file
被視爲輸入文件,它沒有看到任何的參數作爲輸入文件。 例如:
cat file | awk 'code' arg1 arg2 arg3
arg1
不視爲輸入文件。
對嗎?
問題是 我得到awk: cannot open summary (No such file or directory)
爲什麼試圖打開summary
? 這是$input_file
之後的下一個單詞。
如何解決此問題?
而不是「讀取查詢」,然後用'cut'解析'$ query',只需要:'read cmd input_file remaining'(確保IFS是一個合理的值) –
另請參見[本答案]中的建議(http ://stackoverflow.com/q/18825007/812102)。 –