循环遍历带冒号分隔字符串的文件

Kev*_*vin 2 bash awk loops

我有一个看起来像这样的文件:

work:week:day:england:
work1:week:day:sweden:
work2:week:day::
..... 
Run Code Online (Sandbox Code Playgroud)

每次我遍历列表我想要每个字符串作为一个变量,我可以使用.例如,如果我想知道我在哪个位置工作,我会从第一列"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
Run Code Online (Sandbox Code Playgroud)

我想让每个字符串用冒号分隔,作为每个循环的每一行的变量.

fed*_*qui 8

你可以使用bash:set IFS(内部字段分隔符)to :,这将正确捕获字段:

while IFS=":" read -r a b c country
do
  echo "$country"
done < "file"
Run Code Online (Sandbox Code Playgroud)

返回:

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"
Run Code Online (Sandbox Code Playgroud)