awk

awk

我有多个包含 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 

我想将所有行中第三列的所有值设置为 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  

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

答案1

awk '{print $1, $2, "1"}' inputfile

答案2

尝试

awk

 awk '{$3=1 ; print ;}' oldfile > newfile
  • $3 = 1将第三个字段设置为 1

sed(这里是 GNU 或 busybox,sed带有-i就地编辑选项)

sed -i 's/[0-9.]*$/1/' file
  • [0-9.]*$0是从到9.行尾的序列。

sed(打高尔夫球4字节)

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

答案3

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

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

awk -v 'OFS=\t ' '$3="1  "' < infile > outfile

或者与sed

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

答案4

这将完成这项工作:

cat textfiles | cut -d' ' -f-2 | sed 's/$/ 1/'

相关内容