2


我有一个包含这个的字符串(字段分隔符是百分号),存储在一个名为 data 的变量中

201%jkhjfhn%kfhngjm%mkdfhgjdfg%mkdfhgjdfhg%mkdhfgjdhfg%kdfhgjgh%kdfgjhgfh%mkfgnhmkgfnh%k,gnhjkgfn%jkdfhngjdfng

我正在尝试打印出用管道替换百分比符号的字符串,但它似乎比我想象的要硬:

echo ${data} | awk -F"%" 'BEGIN {OFS="|"} {print $0}'

我知道我非常接近它只是不够接近。

我将该代码视为:

1 echo the variable value into a awk session
2 set field separator as "%"
3 set as output field separator "|"
4 print the line
4

2 回答 2

3

试试这个 :

echo "$data" | awk -F"%" 'BEGIN {OFS="|"} {$1=$1; print $0}'

来自awk 手册

最后,有时可以方便地强制 awk 使用字段和 OFS 的当前值来重建整个记录。为此,请使用看似无害的分配:

$1 = $1   # force record to be reconstituted
print $0  # or whatever else with $0

另一种轻量级方法仅tr在您搜索替代方案时使用awk

tr '%' '|' <<< "$data"
于 2013-03-18T11:20:30.457 回答
3

Sputnick 为您提供了awk解决方案,但您实际上根本不需要awk,只需使用您的 shell:

echo ${data//%/|}
于 2013-03-18T11:23:13.813 回答