我有一个文件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还会输出错误的值。
还有什么可以用来纠正这个问题?
答案 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"