【问题标题】:Efficiently append a string to each file line in unix有效地将字符串附加到unix中的每个文件行
【发布时间】:2016-04-11 05:51:48
【问题描述】:

我有一个制表符分隔的文件,我想在每行的每个第一个字段之前附加字符串“chr”,除了作为标题行的第一行(并以“#”字符开头)。

所以例如第二行是:

1       51476   snp_1_51476     T       C       100     PASS

我希望它是:

chr1       51476   snp_1_51476     T       C       100     PASS

对于大约 1000 万行的文件,在 unix 中实现此目的的有效方法是什么?

【问题讨论】:

    标签: file unix append


    【解决方案1】:

    只需使用awk:

    awk 'BEGIN{FS=OFS="\t"}NR>1 {$1="chr"$1}1' file
    

    这会将“chr”附加到除第一行之外的每一行。然后,1 触发每一行的打印。

    否则,sed:

    sed '2,$s/^/chr/' file
    

    这会将后缀chr 添加到从第二行开始的所有行。添加-i,即sed -i '2,$s/^/chr/' file 将使替换到位。


    要对当前目录中的每个文件执行此操作,请说:

    for file in *
    do
       awk 'BEGIN{FS=OFS="\t"}NR>1 {$1="chr"$1}1' file > tmp_file && mv tmp_file file
    done
    

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2019-11-09
      • 2014-09-04
      • 2014-11-18
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多