打印AWK分隔的AWK所有字段

时间:2012-12-04 14:18:10

标签: awk gawk

有没有办法打印OFS分隔的所有记录而不输入每个列号。

#Desired style of syntax, undesired result
[kbrandt@glade: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-( "}; {print $0}'        
1 2 3 4

#Desired result, undesired syntax
[kbrandt@glade: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-) "}; {print $1,$2,$3,$4}'
1 :-) 2 :-) 3 :-) 4

2 个答案:

答案 0 :(得分:33)

这是第一种风格的变体:

echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-( "}; {$1=$1; print $0}'

结果:

1 :-( 2 :-( 3 :-( 4

说明:

$1=$1是使用当前OFS重建记录(您还可以看到http://www.gnu.org/software/gawk/manual/gawk.html#Changing-Fields

更新

(由@EdMorton和@steve建议)这是一个简短的awk命令版本,它在命令行中设置OFS,并利用print $0作为默认操作:

awk -v OFS=" :-( " '{$1=$1}1'

答案 1 :(得分:2)

Sed当量:

$ echo "1 2 3 4" | sed 's/ /:-)/g'

这是awk的另一个选择:

$ echo "1 2 3 4" | awk '{ gsub(/\s/, ":-)")}1'