【问题标题】:Split a string in bash based on delimiter根据分隔符在bash中拆分字符串
【发布时间】:2018-08-23 16:13:17
【问题描述】:

我有一个文件 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 也会打印错误的值。

我还能用什么来纠正这个问题?

【问题讨论】:

标签: bash split


【解决方案1】:

这在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"

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 2014-02-19
    • 1970-01-01
    • 2011-08-04
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    相关资源
    最近更新 更多