2015-11-18 28 views
0

替換字段中輸入數據的值

A BC 3 CD

數據請注意,在田野間的空間是不恆定

現在我要替換的第三場 我已經以這種方式使用AWK其被存儲在另一個變量v另一號碼:

echo "A  BC  3  CD" | awk '{$3 = $v; print}' 

輸出是第三個字段是GETT用整行替換(錯誤的輸出) 是否有可能在不改變原始數據中的空間的情況下獲得所需的輸出? 感謝您的幫助!

+0

嘗試'回聲 「A BC 3 CD」 | awk'{$ 3 =「'」$ v「'」; print}''在你的代碼中,'$ v'正在被'awk'評估。用'v = 0'。因此'$ 3'被'$ 0'取代,這是整行。 – anishsane

+0

'sed's/\(\(\ S * \ s * \)\ {2 \} \)\ S */\ 1'「$ v」'/'' – 123

+0

@anishsane ...... your解決方案是添加一個額外的字段與價值存儲在$ v與原始數據,如下所示: A BC 3 4 CD 也請讓我知道是否有任何方法來替換字段而不改變每個字段之間的空格數量 在此先感謝! – Prashanth

回答

1

試試這個:

$ v=25 
$ echo "A  BC  3  CD" | gawk '{print gensub(/[^ \t]+/, v, 3)}' v="$v" 
A  BC  25  CD 

在你的代碼,$v正在awk,不bash評估,以v=0。因此$3被替換爲$0,這是整行。

注意gensubgawk增強...

+0

這會明顯改變原始數據中的空格... – 123

+0

哦......我錯過了空格不一致...... – anishsane

+1

固定.......... – anishsane