Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用冒号分隔的字符串遍历文件_Bash_Loops_Awk - Fatal编程技术网

Bash 使用冒号分隔的字符串遍历文件

Bash 使用冒号分隔的字符串遍历文件,bash,loops,awk,Bash,Loops,Awk,我有一个文件如下所示: work:week:day:england: work1:week:day:sweden: work2:week:day:: ..... 每次我循环遍历列表时,我都希望得到每个字符串作为变量,我可以使用它。 例如,如果我想知道我在哪个位置工作,我会从第一列“工作*”中得到第四列位置 我试过这个: for country in $( awk -F '[:]' '{print $1}' file.txt); do if [[ "$country" == "engl

我有一个文件如下所示:

work:week:day:england:
work1:week:day:sweden:
work2:week:day::
..... 
每次我循环遍历列表时,我都希望得到每个字符串作为变量,我可以使用它。 例如,如果我想知道我在哪个位置工作,我会从第一列“工作*”中得到第四列位置

我试过这个:

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

我希望将每个字符串用冒号分隔,作为每行每个循环的变量。

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

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

只需在awk中完成整个过程:

awk -F: '$4=="england"{print "this user works in England";next}
         {print "You do not work in England"}' file
将字段分隔符设置为冒号。如果第四个字段是“england”,则打印第一条消息<代码>下一行跳到下一行。否则,打印第二条消息


每行上的字段都可以通过
$1
$2
等进行访问。因此,您可以使用awk中每个字段中的数据执行任何您想要的操作。该字段是自动逐行读取的,因此在读取循环时无需编写自己的

谢谢!这正是我想要的!
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 -F: '$4=="england"{print "this user works in England";next}
         {print "You do not work in England"}' file