Skip to content

Latest commit

 

History

History
53 lines (44 loc) · 2.45 KB

循环处理文件中的数据.md

File metadata and controls

53 lines (44 loc) · 2.45 KB

循环处理文件中的数据

在脚本中,循环语句多用于对文件的操作,如果如启动某个目录下的脚本文件或对数据 文件进行读取,如果对数据文件进行操作,需要使用嵌套循环,因为文本文件一般由行 和列组成,外层循环读取以行为单位的数据,内层循环操作的是以某个分隔符分割的一 行数据。另外,根据不同情况修改 IFS 环境变量,下面通过例子说明如何对数据文件进行操作。

  • 首先创建一个文本文件 file08:

      1501010001 71.05 2141618 3 07/11/15 21:46:57 1006 User001 109 4 303
      1501010002 865.86 1686831 2 05/11/15 03:52:44 1009 User009 109 1 302
      1501010003 652.61 2587675 2 07/14/15 19:17:39 1010 User003 110 1 305
      1501010004 905.24 1282788 1 04/17/15 17:14:09 1010 User004 102 3 304
      1501010005 444.25 1624680 1 04/05/15 11:40:51 1005 User009 108 1 308
    
    • 测试数据是从销售流水表中抽取的五条销售数据,共十个字段,是流水号、销售金额、 卡号、记录状态、销售日期、销售员编码、销售员名称、pos 机号、客户类别和销售门 店号。
  • 我们要采用嵌套循环的方式读取文件内容,字段分隔符是制表符,还有分隔每一条记录的换行符,需要对变量 IFS 进行设置。

    #!/bin/bash
    # 数据文件
    datafile=/home/yarn/bash01/file08
    # 保存默认设置
    IFS_bak=$IFS
    # 设置分割符为换行符
    IFS=$'\n'
    # 从文件中读取行
    for line in `cat $datafile`
    do
       # 设置字段分割符为制表符
       IFS=$'\t'
       # 对每一行数据进行分割读取
       for column in $line
       do
          echo -n "$column "
       done
       # 换行
       echo
    done
    # 还原默认设置
    IFS=$IFS_bak
    
    • 控制台显示:

       1501010001 71.052141618 3 07/11/15 21:46:57 1006 User001 109 4 303
       1501010002 865.86 1686831 2 05/11/15 03:52:44 1009 User009 109 1 302
       1501010003 652.61 2587675 2 07/14/15 19:17:39 1010 User003 110 1 305
       1501010004 905.24 1282788 1 04/17/15 17:14:09 1010 User004 102 3 304
       1501010005 444.25 1624680 1 04/05/15 11:40:51 1005 User009 108 1 308
      

需要注意的是变量 IFS 需要设置两次,第一次是分割行,第二次是分割字段。循环执行完毕后要还原 IFS 变量的默认值。