我有一个具有以下输入的文件(示例不是完整文件)
JANE,SMITH,12,1000298,2
CLARA,OSWALD,10,10890298,4
我们有FirstName
,Lastname
,Grade
,ID
和School
。我有一个循环,将每个循环读入它们自己的变量。最后一个数字(2,4)
表示他们所属的学校,我的代码将2
更改为HS
,并将4
更改为ML
。我需要通过测试。如果找到2
,请在其中找到3
,以此类推。
#!bin/bash
OLDIFS=$IFS
IFS=","
while read First_Name Last_Name Grade Student_Id school
do
if [[ $school == 2 ]]
then
School=$(echo $school | sed -e 's/2/HS/g')
elif [[ $school == 3 ]]
then
School=$(echo $school | sed -e 's/3/MI/g')
else
School=$(echo $school | sed -e 's/4/ML/g')
fi
echo $First_Name $Last_Name $Grade $Student_Id $School
done < $1
IFS=$OLDIFS
好的。因此,根据文件中的输入,学校有2,4。当找到2时,应将2更改为HS。但是测试失败。即使我使用-eq
,它也会失败。我添加""
只是为了查看它是否执行了任何操作,但是什么也没做。当我回显$school
时,它会给我正确的数字2,4,但无法对其进行比较。
正确的输出
JANE,SMITH 12 1000298 HS
CLARA OSWALD 10 10890298 ML
我得到的是
CLARA OSWALD 10 10890298 ML
因为它直接跳到else部分。它不检查第一个。而且,如果我尝试检查$school == 4
或(-eq
),它也会失败。
答案 0 :(得分:0)
尝试一下:
输入文件
JANE,SMITH,12,1000298,2
CLARA,OSWALD,10,10890298,4
DONALD,DUCK,10,10890298,3
DAISY,DUCK,10,10890298,2
脚本
IFS="," # set field separator
while read line; do # read all line
set -- $line # split lines
case $5 in # depending on last value in line
2) school="HS";; # choose the school form
3) school="MI";;
4) school="ML";;
esac
echo "$1,$2 $3 $4 $school" # print output
done < inputfile # read from inputfile
输出
JANE,SMITH 12 1000298 HS
CLARA,OSWALD 10 10890298 ML
DONALD,DUCK 10 10890298 MI
DAISY,DUCK 10 10890298 HS