使用内部字段分隔符读取文件

本文深入探讨了bash shell中的特殊环境变量IFS(内部字段分隔符)的使用技巧,包括其默认值、如何临时更改以及在循环处理文件时的应用。通过具体示例,展示了如何利用IFS读取文件内容并按不同字段分隔符进行数据处理。

特殊环境变量IFS,叫做内部字段分隔符(internal field separator)
默认情况下,bash shell默认会以下列字符作为内部字段分隔符:

  • 空格
  • 制表符
  • 换行符

读取一个文件

可以临时更改IFS环境变量的值来限制被bash shell当作字段分隔符的字符。
如拾起只能识别换行符,IFS=$’\n’.
下面先新建一个文件,如下所示:
$ cat states

Alabama
Alaska
Arizona
Delaware

再新建一个脚本,命名为test
$cat test

#!/bin/bash
# reading values from a file
file="states"

IFS=$'\n'
for state in $(cat $file)
do
  echo "Visit beautiful $state"
done

执行test脚本,可以获得如下输出

Visit beautiful Alabama
Visit beautiful Alaska
Visit beautiful Arizona
Visit beautiful Delaware

注:如果要指定多个IFS字符,只要将它们在赋值行串起来就行
如IFS=$’\n’:;"会将换行符,冒号,分号,双引号作为字段分隔符。

循环处理文件

通过修改IFS,不停变换字段分隔符,可以用在循环处理文件中
先新建一个文件:
$cat cities

Shandong:jinan
heilongjiang:haerbin
fujian:fuzhou
yunan:kunming

再新建一个脚本,命名为test2
$cat test2

#!/bin/bash
#city in province
IFS=$'\n'
for city in $(cat cities)
do 
  echo City is $city
  IFS=:
  for value in $city
  do 
     echo " $value"
  done
done

执行test2脚本,可以获得如下输出:

City is Shandong:jinan
 Shandong
 jinan
City is heilongjiang haerbin
 heilongjiang
 haerbin
City is fujian fuzhou
 fujian
 fuzhou
City is yunan kunming
 yunan
 kunming

从上面的例子中,可以看到一开始将IFS设置为换行符,用于读取每行数据
之后通过修改IFS为冒号,用于分隔每行数据中每个字段,最后通过嵌套循环展示。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值