我有一个文件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
Run Code Online (Sandbox Code Playgroud)
我试图获取基于":"分隔符的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
Run Code Online (Sandbox Code Playgroud)
但是此代码为field_a提供的值是错误的,它会根据""分隔符拆分该行.echo $ i也打印错误的值.
还有什么可以用来纠正这个问题?
BashFAQ#1 详细介绍了这一点.总而言之,使用带有set 的循环来包含(仅)应该用于分割字段的字符.while readIFS
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"
Run Code Online (Sandbox Code Playgroud)