在linux下的文本文件中更改特定位置的某个值,为多个文件完成

时间:2014-08-19 17:42:17

标签: linux awk sed

我有近500个文本文件,每个文件包含5列数字和近100行,我想将所有10个文件更改为15个例如但仅限于第一个柱。这可以用sed完成吗?还是awk?我也想同时为所有500个文件执行此操作。

样本输入(简化)

10  10  19  
21  15  18 
10  25  10

期望的输出

15  10  19
21  15  18
15  25  10

2 个答案:

答案 0 :(得分:1)

开始的每一行替换为10 ...正则表达式字符 ^ 在一行的开头匹配。

如果你的文本文件都在一个目录的子树中,你的文本文件就是#34;你可以找到所有这些文件并对它们运行sed:

find youdir -name \*.txt -exec sed -i '' -e 's/^10 /15 /' {} +

或更简单地说,如果所有文本文件都在当前目录中:

sed -i '' -e 's/^10 /15 /' *.txt

这些人说要在行的开头用一个五个空格替换一个零空格。

-i ''选项表示在没有备份的情况下就地修改文件。

答案 1 :(得分:1)

鉴于此输入文件:

$ cat file
10 10 19
21 15 18
10 25 10

通常,要将行old中的号码new更改为号码row,列col为:

$ awk -v old=10 -v new=37 -v row=1 -v col=1 'NR==row && $col==old{$col=new} 1' file
37 10 19
21 15 18
10 25 10

在所有行的col列中:

$ awk -v old=10 -v new=37 -v col=1 '$col==old{$col=new} 1' file
37 10 19
21 15 18
37 25 10

在所有列的行row中:

$ awk -v old=10 -v new=37 -v row=1 'NR==row{ for(col=i;col<=NF;col++) $col=($col==old?new:$col)} 1' file
37 37 19
21 15 18
10 25 10

你看到了模式......