使用awk修改文本

use*_*573 3 linux awk text replace sed

我正在尝试使用awk修改文本文件.有三列,我想删除第一列中的部分文本:

range=chr1      20802865        20802871        
range=chr1      23866528        23866534
Run Code Online (Sandbox Code Playgroud)

chr1      20802865        20802871        
chr1      23866528        23866534
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我试过awk '{ substr("range=chr*", 7) }'awk '{sub(/[^[:space:]]*\\/, "")}1',但删除了文件中的所有内容.

Chr*_*our 6

将字段分隔符设置为=并打印第二个字段:

# With awk                                                                     
$ awk -F= '{print $2}' file
chr1      20802865        20802871        
chr1      23866528        23866534

# Or with cut
$ cut -d= -f2 file                  
chr1      20802865        20802871        
chr1      23866528        23866534

# How about grep
$ grep -Po '(?<==).*' file
chr1      20802865        20802871        
chr1      23866528        23866534

# Temp file needed
$ cut -d= -f2 file > tmp; mv tmp file
Run Code Online (Sandbox Code Playgroud)

这两种awk,cutgrep需要临时文件,如果你想保存更改回file,一个更好的解决办法是使用sed:

 sed -i 's/range=//' file
Run Code Online (Sandbox Code Playgroud)

这替代range=了什么都没有,并且-i意味着更改是就地完成的,因此不需要像sed处理它那样处理临时文件.