我有近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
答案 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
你看到了模式......