繁体   English   中英

循环使用以冒号分隔的字符串的文件

[英]Loop through a file with colon-separated strings

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

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

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

你可以使用bash:将IFS (内部字段分隔符)设置为:这将正确捕获字段:

while IFS=":" read -r a b c country
do
  echo "$country"
done < "file"

返回:

england
sweden

通过这种方式,您可以在第一个字段使用$a ,第二个字段使用$b ,第三个字段使用$a $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"

在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循环时无需编写自己的字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM