2012-12-04 34 views
17

分離有沒有一種方法來打印由OFS分隔的所有記錄,而不打字每列數。打印所有的字段AWK通過OFS

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

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

回答

26

這是第一個樣式的變化:

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' 
+5

完美的,但它應該是幸福的笑臉,因爲它的工作原理;-) –

+0

這是一個很好反對:)問候 –

+0

@steve注:有取代了塊'{$ 1美元一個編輯= $ 1;打印$ 0}'只需要$ 1 = $ 1'。這會導致$ 1 == 0失敗。 –

2

桑達相當於:

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

下面是使用awk另一種選擇:

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

歡迎來到SO!問題是關於awk的具體問題,所以使用sed的答案在這裏不合適 – cfi

+0

如果你注意到,我認爲你應該閱讀'sed's// :-)/g'',OP在笑臉周圍有一個空格OFS – v010dya