2014-10-03 65 views
0

我試圖通過行改爲在linux行的文件方含的數據是這樣的代替字符串替換文件在Linux

522240227  B009CPMJ1M  20141003  20141103  1063278 1  1  6 
604710621  B004NPI3OI  20141003  20141103  166431 1  1  6 
1498812521  B00LFEHWJM  20141003  20141103  1044646 1  10  6 
1498812521  B00D3IK0Y2  20141003  20141103  1044646 2  10  6 

然後我不得不增加20億到每一行的第一個整數和替換該整數。所以,最終的文件會像

2522240227  B009CPMJ1M  20141003  20141103  1063278 1  1  6 
2604710621  B004NPI3OI  20141003  20141103  166431 1  1  6 
31498812521  B00LFEHWJM  20141003  20141103  1044646 1  10  6 
31498812521  B00D3IK0Y2  20141003  20141103  1044646 2  10  6 

有沒有我可以在同一個文件來完成這個操作,而無需使用shell腳本

回答

1

這是AWK創建任何其他臨時文件!

awk '{$1+=2000000000}1' file 

它返回:

2522240227 B009CPMJ1M 20141003 20141103 1063278 1 1 6 
2604710621 B004NPI3OI 20141003 20141103 166431 1 1 6 
3498812521 B00LFEHWJM 20141003 20141103 1044646 1 10 6 
3498812521 B00D3IK0Y2 20141003 20141103 1044646 2 10 6 

這是很說明:$1+=2000000000增加2000000000爲所述第一值。那麼,1爲真,所以它執行默認的awk操作:{print $0},即打印該行。

要替換文件,重定向到一個臨時文件,然後移動:

awk '{$1+=2000000000}1' file > new_file && mv new_file file 

由於這是一個大數目,它是在一個E + XX格式打印,我們進行了修復與格式sprintf()

awk '{$1 = sprintf("%0.f", $1+=2000000000)}1' file 

這利用了sprintf的利潤給格式化值存儲到一個變量,以便然後將其正確打印。

+0

我可以知道downvote的原因嗎? – fedorqui 2014-10-03 09:13:09

+0

由於第一數量非常大,該命令輸出後,即將這樣的:1.26737e + 10 B00BXNOD56 20141003 20141103 69765 1 4 6 1.26742e + 10 B008O9LLN4 20141003 20141103 602348 2 2 6 1.26756e + 10 B007BKFFZM 20141003 20141103 15857531 5 20 6 1.26764e + 10 093794811X 20141003 20141103 173515 1 3 6 1.26764e + 10 1560327146 20141003 20141103 173515 1 3 6 1.26777e + 10 B00DXYNQYC 20141003 20141103 502394 1 1 6 1.26803e + 10 B00IKL8VIO 20141003 20141103 495224 1 3 6 – user3034987 2014-10-03 09:13:52

+0

@ user3034987如果你說'awk'{$ 1 + = 2000000000; printf「%0.f \ n」,$ 1}'file' ?? – fedorqui 2014-10-03 09:21:51