2014-01-23 33 views
1

嗨我有一个文件,其中包含很多不同值的值列表,我希望能够增加一个值来为每个值创建一堆文件。替换特定列上的值对于不同的值

即我的文件看起来像这样:

TEST.DAT

5 500 Mruh 
6 100 Mrah 
15 1.77 Mta 
. 
. 
. 

等等... 我会非常喜欢挑出来的,比方说值,6(也就是100 )并增加50,然后每增加一个新文件。 所以最终产品应该是一个新的文件看起来像:

test_50.dat

5 500 Mruh 
6 150 Mrah 
15 1.77 Mta 

我使用awk命令尝试,但遇到了问题。任何帮助都会很棒。

干杯!

+2

您遇到过哪些问题?显示代码,以便我们可以尝试提供指导。另外,那么'6'是一个参数,然后总是增加50(固定)? – fedorqui

回答

1

awk应该做的:

awk '$1==6 {sub($2,$2+50)}1' file >test_50.dat 
cat test_50.dat  
5 500 Mruh 
6 150 Mrah 
15 1.77 Mta 

搜索与6再行添加50#2
我使用sub保留格式就像你在这里看到:

awk '$1==6 {$2+=50}1' file >test_50.dat 
cat test_50.dat 
5 500 Mruh 
6 150 Mrah 
15 1.77 Mta 

要根据值将其读取到文件中

awk '$1==6 {sub($2,$2+v)} {print $0 > "test_"v".dat"}' v=50 file 
cat test_50.dat 
5 500 Mruh 
6 150 Mrah 
15 1.77 Mta 
+1

'sub()'不保留格式。而且,这是危险的。因为它确实与'regex'匹配。想想第二行是'6 6 Mrah',你的sub()将会替换第一列。所以'+'解决方案是正确的。如果想要某种格式,稍后使用'printf'等。 – Kent

+0

如果你想保持格式化,你也可以在Gnu Awk版本4中使用'split()'函数。它有第四个参数,它是字段之间的分隔符。 –

+0

@kent那么如何使用' awk' 3x(大多数Ubuntu的默认)? – Jotne