在awk中使用OFS的问题

时间:2013-03-18 11:18:39

标签: bash awk


我有一个包含此字符串的字符串(字段分隔符是百分号),存储在名为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

2 个答案:

答案 0 :(得分:3)

试试这个:

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

来自awk manual

  

最后,有时候强制awk重建整个过程很方便   记录,使用字段和OFS的当前值。要做到这一点,请使用貌似   无害的任务:

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

如果您搜索tr的替代方案,则只使用awk的另一种轻量级方法:

tr '%' '|' <<< "$data"

答案 1 :(得分:3)

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

echo ${data//%/|}