使用awk修改数据

时间:2011-01-28 23:26:23

标签: bash

在一个长文件中,我正在寻找这样的东西:
c 0.5p_f
10 px 2

我需要在'c 0.5p_f'标记之后修改一行的第3列。

它是bash脚本的一部分,它会执行此操作,我想避免使用awk脚本,只使用bash命令。

1 个答案:

答案 0 :(得分:2)

为什么不使用awk?这很完美。

do_modify{$3="modify";do_modify=0}/c 0\.5p_f/{do_modify=1}1

如果您可以使用sed脚本,

/c 0\.5p_f/{n;s/\([^[:space:]]*[[:space:]]\+[^[:space:]]*[[:space:]]\+\)\S*/\1modify/}

会这样做。不过,纯粹的Bash也不是很难。

do_modify=
while read -r line; do
    if [[ -n ${do_modify} ]]; then
        columns=(${line})
        columns[2]=modified
        line=${columns[*]}
        do_modify=
    fi
    printf '%s\n' "${line}"
    if [[ ${line} = *'c 0.5p_f'* ]]; then
        do_modify=1
    fi
done