2012-11-26 122 views
1

我想用vim編輯器或sed命令將另一個值替換爲最後一列值。我嘗試了下面的命令,但是它替換了我的第二個已經存在的數據有時列。用另一個值替換unix文件中的最後一列

:%s/,3/,2/ 

我的樣本數據:

410339,166,1430,3 
410340,112,1840,3 
410341,109,1315,3 
410342,123,1435,3 
410343,230,3200,3 
410344,857,36975,3 
410345,125,4440,3 
410346,105,1460,3 
410348,122,1150,3 
410349,314,2380,3 
410350,132,4650,3 
410351,136,7465,3 
410352,103,1775,3 
410353,101,1095,3 
410354,101,1360,3 

回答

3

要完成在Vim的嘗試,只是錨匹配的表達式與$行的末尾。

:%s/,3$/,2/ 

產地:

410339,166,1430,2 
410340,112,1840,2 
410341,109,1315,2 
410342,123,1435,2 
410343,230,3200,2 
410344,857,36975,2 
410345,125,4440,2 
410346,105,1460,2 
410348,122,1150,2 
410349,314,2380,2 
410350,132,4650,2 
410351,136,7465,2 
410352,103,1775,2 
410353,101,1095,2 
410354,101,1360,2 
+0

當模式被錨定到行尾時,全局標誌的要點是什麼? – Steve

+0

@steve的確.. –

4

你需要表明您希望最終的行:

:%s/,3$/2/ 
2

隨着GNU sed

如果最後一列只有'3':

sed -i 's/3$/2/' file 

如果最後一列可能是像 '13':

sed -i 's/,3$/,2/' file 

-i標誌:

-i[SUFFIX], --in-place[=SUFFIX] 
    edit files in place (makes backup if extension supplied) 
3

我會用awk

awk '{$NF=2}1' FS=, OFS=, 

這無條件使最後一列的值爲2.如果所需的替換是一個字符串,那麼ü將需要使用引號或更靈活:

awk '{$NF=r}1' FS=, OFS=, r="the string to put in the last column" 

可以限制置換到具有價值3與列:

awk '$NF==3{$NF=r}1' FS=, OFS=, r="the string to put in the last column" 

而且,要做到這一點在vim,只是做:

:%! awk ... 
相關問題