我有一个名为data.txt的文件,其中包含以下内容:
1440;150;1000000;pizza;hamburger
1000;180;56124;coke;sprite;water;juice
566;40;10000;cake;pizza;coke
我想制作一个程序,要求用户输入,然后打印出包含给定单词的行。
例如:
如果我输入可乐,它应该打印出第二行和第三行。如果输入hambuger,则只应打印第一行。
这是我尝试的代码,但是它不起作用。有人可以帮我吗?
echo "Enter a word"`
read word
while read line; do
numbersinthefile=$(echo $line | cut -d';' -f4);
if [ $numbersinthefile -eq $num ]; then
echo $line;
fi
done
我早先忘了提到我希望程序允许用户进行多次输入。示例:
如果我输入“ pizza sprite”,它会显示第一行和第二行。
答案 0 :(得分:3)
那是一个简单的grep
,不是吗?
read -p "Enter a word: " word
grep -F "$word" file
添加-w
以使coke
仅与coke
匹配,而不与co
或ok
匹配。
read -p "Enter a word: " word
grep -Fw "$word" file
答案 1 :(得分:2)
请您尝试一次。
cat script.ksh
echo "Please enter word which you want to look for in Input_file:"
read value
awk -v val="$value" '$0 ~ val' Input_file
运行上面的代码后,下面是它的工作原理。
./script.ksh
Please enter word which you want to look for in Input_file:
coke
1000;180;56124;coke;sprite;water;juice
566;40;10000;cake;pizza;coke
EDIT: :如果要将多个值传递给脚本,那么如何将它们作为参数传递给程序本身呢?
cat script.ksh
for var in "$@"
do
awk -v val="$var" '$0 ~ val' Input_file
done
然后以以下方式运行脚本。
script.ksh test coke cake etc
答案 2 :(得分:1)
以下是awk中的一个,它接受部分匹配:
'BlockDeviceMappings': [{'DeviceName': '/dev/sda1',
'Ebs': {'AttachTime': datetime.datetime(2018, 7, 14, 16, 44, 31, tzinfo=tzutc()),
'DeleteOnTermination': True,
'Status': 'attached',
'VolumeId': 'vol-096cd0ee0ace156df'}},
输出
$ awk '
BEGIN {
FS=";" # file field sep
printf "Feed me text: " # text for prompt
if((getline s < "-")<=0) # read user input
exit # exit if unsuccessful
}
{
for(i=4;i<=NF;i++) # iterate fields from file records >= 4
if($i~s) { # if match (~ since there was a space in eof NR==3)
print
next # only output each matching record once
}
}' file