将一列中的所有值替换为 1

use*_*269 9 grep sed awk text-processing replace

我有多个包含 12 行和 3 列的文本文件。

例子:

2       6    0.74  
42      6    0.58  
80      6    0  
112     6    0.24  
132     6    1  
216     6    0.7  
342     6    0  
390     6    0.21  
432     6    0.56  
466     6    0.75  
524     6    0.6  
646     6    0.9 
Run Code Online (Sandbox Code Playgroud)

我想在所有行中将第三列的所有值设置为 1。

输出应如下所示:

2    6   1  
42   6   1  
80   6   1  
112  6   1  
132  6   1  
216  6   1  
342  6   1  
390  6   1  
432  6   1  
466  6   1  
524  6   1  
646  6   1  
Run Code Online (Sandbox Code Playgroud)

有谁知道可以解决这个问题的命令?

use*_*494 17

awk '{print $1, $2, "1"}' inputfile
Run Code Online (Sandbox Code Playgroud)


Arc*_*mar 12

尝试

awk

 awk '{$3=1 ; print ;}' oldfile > newfile
Run Code Online (Sandbox Code Playgroud)
  • $3 = 1 将第三个字段设置为 1

sed(此处为 GNU 或 busyboxsed及其-i就地编辑选项)

sed -i 's/[0-9.]*$/1/' file
Run Code Online (Sandbox Code Playgroud)
  • [0-9.]*$是从一个序列09.到行的结尾。

sed(打高尔夫球4个字节)

sed -i 's/[^ ]*$/1/' file
Run Code Online (Sandbox Code Playgroud)
  • [^ ]*$ 除空格外的任何字符,直到行尾。

  • 让我们代码高尔夫:`sed 's/[^ ]*$/1/'` :-> (3认同)
  • `awk` 打高尔夫球:`awk \$3=1`(POSIX 但不能与 70 年代的 awk 一起使用,如在 Solaris 上的 /bin 中找到的那样) (3认同)

Sté*_*las 5

预期输出中的行似乎以两个空格字符结尾,并且字段由一个制表符和一个空格字符分隔。

如果这确实是您想要的,那么您需要:

awk -v 'OFS=\t ' '$3="1  "' < infile > outfile
Run Code Online (Sandbox Code Playgroud)

或与sed

tab=$(printf '\t')
sed "
  s/[[:blank:]]\{1,\}/$tab /g
  s/[^[:blank:]]\{1,\}[[:blank:]]*$/1  /
  s/^[[:blank:]]*//" < infile > outfile
Run Code Online (Sandbox Code Playgroud)