我有一个看起来像这样的文件:
work:week:day:england:
work1:week:day:sweden:
work2:week:day::
.....
每次我遍历我想要的列表时,请将每个字符串作为我可以使用的变量。 例如,如果我想知道我在哪个位置工作,我会从第一栏“work *”获得第四个位置栏
我试过了:
for country in $( awk -F '[:]' '{print $1}' file.txt); do
if [[ "$country" == "england" ]];
then
echo "This user works in England!"
else
echo "You do not work in England!"
fi
done
我想将每个字符串用冒号分隔为每个循环的每一行的变量。
答案 0 :(得分:8)
你可以使用bash:将IFS
(内部字段分隔符)设置为:
,这将正确捕获字段:
while IFS=":" read -r a b c country
do
echo "$country"
done < "file"
返回:
england sweden
通过这种方式,您可以将$a
用于第一个字段,$b
用于第二个字段,$c
用于第三个字段,$country
用于第四个字段。当然,根据您的要求调整数量和名称。
所有在一起:
while IFS=":" read a b c country
do
if [[ "$country" == "england" ]]; then
echo "this user works in England"
else
echo "You do not work in England"
fi
done < "file"
答案 1 :(得分:2)
在awk中完成整个事情:
awk -F: '$4=="england"{print "this user works in England";next}
{print "You do not work in England"}' file
将字段分隔符设置为冒号。如果第四个字段是“england”,则打印第一条消息。 next
跳到下一行。否则,打印第二条消息。
每行的字段都可以通过$1
,$2
等访问,因此您可以使用awk中每个字段中的数据来执行您想要的任何操作。该字段是自动逐行读取的,因此无需编写自己的while read
循环。