2012-05-31 45 views
0

我有一個2column,標籤delimiterde文件:AWK:第2列由下劃線代替空間

[email protected] Name Fullname 

(注:NameFullname之間是空格)


我想得到的是一個別名文件:

alias nickname Name Fullname [email protected] 

(注意:這裏沒有標籤,一切都是空格。 )


我固定

awk -F "\t" '{ print "alias" " " $2 " " $2 " " $1 }' $FILE 

這給了我:

別名全名姓名全名電子郵件@地址

,但我想獲得:

alias Name_Fullname Name Fullname [email protected] 

那麼,如何用下劃線替換第二列中的所有空格? 感謝


我試圖

awk -F "\t" '{ print "alias" " " sub(/ /,"_",$2) " " $2 " " $1 }' $FILE 

但讓我奇怪:

alias 1 Name_Fullname [email protected] 

回答

0

怎麼樣使用默認的輸入分隔符:

awk '{printf "alias %s %s_%s %s %s %s\n", $2, $3, $2, $3, $1}' $FILE 
+0

問題是第二列「名稱全名」有時包含1個有時有2個或更多個空格。 – jods

1

試試這個:

awk -F "\t" '{x=$2;print "alias" " " gsub(/ /,"_",x) " " $2 " " $1 }' $FILE 
+0

+1 - 用逗號代替所有這些''「',以達到相同的效果,但看起來更整齊。逗號替換爲默認爲空格的「OFS」。 @ user1427715:你的工作原理並不是這樣,是因爲'sub()'和'gsub'在原地進行了替換。 –

+0

'awk -F「\ t」'{x = $ 2; gsub(/ /,「_」,$ 2);打印「別名」,$ 2,x,$ 1}'$ FILE'完成了,再次感謝 – jods