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


8

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

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

Answers:


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

1
此命令在终端中正确打印出文本文件中的第一行,但未在文件中进行更改...
user203269 2013年

将输出重定向到另一个文件awk '{print $1, $2, "1"}' inputfile > newfile
user1700494 '16

谢谢!它有效,但只写出第一行,第1、2和3列。我想以相同的方式写出所有12行:)
user203269

12

尝试

awk

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

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

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

sed(传送的4个字节)

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

3
让我们代码高尔夫::sed 's/[^ ]*$/1/'->
Ipor Sircer '16

非常感谢!:)除了第一行之外,awk似乎还可以工作:2 6 1 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 The第一行两次打印第二和第三值?
user203269'1

@ user203269 awk版本对我来说很好(尽管有格式问题)
Archemar

3
awkgolfed:awk \$3=1(POSIX,但不会在/ bin中在Solaris上从70年代awk的工作)
斯特凡Chazelas

awk解决方案是真的很酷....你能解释一下PLS
mazs

5

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

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

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

为什么1之后的空格?
123

就像我说的,@ 123在OP的预期输出中,每行以两个空格字符结尾。
斯特凡Chazelas

误读以为您说的是字段由两个空格和一个制表符分隔。我的错。
123

嗨斯蒂芬,这AWK不正确的前三个值,则删除列1行2,并继续而不进行更改..
user203269

1
@ user203269,首先将文件从MS-DOS转换为Unix。
斯特凡Chazelas

3

只需使用GNU sed-i即可直接在文件中替换文本:

sed -i 's:\(.*\s\)\(.*\s\)\(.*\):\1\21:g' textfile

这些列通过括号中的正则表达式组进行匹配,将它们与\1和重用\2,然后使用“ 1”替换最后一个组。

在此用例中,建议使用的解决方案awk也不错且简短。


2

这将完成工作:

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

猫file.txt | 切-d''-f-2 | sed's / $ / 1 /'646 6 0.5 1在终端中打印出一行(最后一行),但不更改file.txt ...
user203269

-1
cat filename | awk -F ' ' '{$3=1; print $0}' > filename

您能否编辑您的帖子以包含更多有关为什么您认为这是解决方案的背景信息?
kemotep
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.