根据定界符

时间:2018-08-23 16:13:17

标签: bash split

我有一个文件log_file,其中包含诸如

CCO O-MR1 Sync:No:3:No:346:Yes
CCO P Sync:No:1:No:106:Yes
CCO P Checkout:Yes:1:No:10:No
CCO O-MR1 Checkout(2.2):Yes:1:No:10:No

我正在尝试基于“:”定界符获取4个字段 我拥有的脚本是

#!/bin/bash
log_file=$1

for i in `cat $log_file` ; do
        echo $i
        field_a=`echo $i | awk -F '[:]' '{print $1}'`
        echo $field_a
        field_b=`echo $i | awk -F '[:]' '{print $2}'`
        echo $lfield_b
        ...
done

但是此代码为field_a给出的值是错误的,它基于“”分隔符来分割行。 echo $ i还会输出错误的值。

还有什么可以用来纠正这个问题?

1 个答案:

答案 0 :(得分:5)

BashFAQ #1详细对此进行了介绍。总而言之,请使用while read循环,并将IFS设置为包含(仅)应用于分割字段的字符。

while IFS=: read -r field_a field_b other_fields; do
  echo "field_a is $field_a"
  echo "field_b is $field_b"
  echo "Remaining fields are $other_fields"
done <"$log_file"