如何在Linux中重命名列?

时间:2018-07-10 08:11:23

标签: linux sed rename

我有一个这样的桌子

 bedGraph  chrom=chr1 chr1:0-000
    1000    0
    2000    0
    3000    0.003802
    4000    0.046175
 bedGraph  chrom=chr2 chr2:5000-6000
    5000    0.103756
    6000    0.161337

 EXPECTED RESULTS

bedGraph  chrom=chr1 rep
    1000    0
    2000    0
    3000    0.003802
    4000    0.046175
 bedGraph  chrom=chr2 rep
    5000    0.103756
    6000    0.161337

,我只想重命名第三个列(第二个列沿文件更改)。可以使用sed来做到这一点吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

对于给定的示例,此单线工作:

awk 'NF==3{$3="rep"}7' file

答案 1 :(得分:1)

sed '/bedGraph/s/chr[12]:.*/rep/'

对于包含badGraph的行,用chr[1 or 2]:<anything>代替rep

sed 's/^\([[:space:]]*[^[:space:]]\+[[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+\)[^[:space:]]\+$/\1 rep/'

过滤并记住[[:space:]]*[^[:space:]]\+[[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+行中的前两个单词,这在贝斯语中是<spaces or nothing><not spaces><spaces><not spaces><spaces>,然后用[^[:space:]]\+过滤掉第三个单词并打印前两个单词(即第一个单词)匹配),并用代表替换第三列。