unix - 将 header 插入文件

标签 unix header insert awk

我想听听您关于如何将 header 行(文件中的所有行)插入另一个文件(更大,几GB)的指示。我更喜欢用Unix/awk/sed的方式来完成这项工作。

# header I need to insert to another, they are in a file named "header".


##fileformat=VCFv4.0
##fileDate=20090805
##source=myImputationProgramV3.1
##reference=1000GenomesPilot-NCBI36
##phasing=partial
##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency">
##INFO=<ID=AA,Number=1,Type=String,Description="Ancestral Allele">
##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129">
##INFO=<ID=H2,Number=0,Type=Flag,Description="HapMap2 membership">
##FILTER=<ID=q10,Description="Quality below 10">
##FILTER=<ID=s50,Description="Less than 50% of samples have data">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
##FORMAT=<ID=HQ,Number=2,Type=Integer,Description="Haplotype Quality">
#CHROM POS     ID        REF ALT    QUAL FILTER INFO 

最佳答案

header="/name/of/file/containing/header"
for file in "$@"
do
    cat "$header" "$file" > /tmp/xx.$$
    mv /tmp/xx.$$ "$file"
done

您可能更希望将临时文件与正在编辑的文件放在同一文件系统上,但是任何需要在文件开头插入数据的操作最终都将与此接近。如果每天要整天这样做,则可能需要整理一些东西,但是节省的机会很小(每个文件几分之一秒)。

如果确实需要使用sed,那么我想您可以使用:
header="/name/of/file/containing/header"
for file in "$@"
do
    sed -e "0r $header" "$file" > /tmp/xx.$$
    mv /tmp/xx.$$ "$file"
done

该命令读取 header “0”行之后(1行之前)的内容,然后其他所有内容不变地传递。但是,这没有cat快。

使用awk的类似构造是:
header="/name/of/file/containing/header"
for file in "$@"
do
    awk '{print}' "$header" "$file" > /tmp/xx.$$
    mv /tmp/xx.$$ "$file"
done

这只是在输出上打印每条输入线。再次,不如cat快。
cat优于sedawk的另一优势;即使大文件主要是二进制数据,cat也将起作用(它忽略了文件的内容)。 sedawk均设计用于处理拆分为行的数据;尽管现代版本可能甚至可以很好地处理二进制数据,但这并不是他们设计的目的。

关于unix - 将 header 插入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980153/

上一篇:.net - 引用类型

下一篇:Z3 模式和单射性

相关文章:

mysql - 如何将其他表中的主 ID 插入到新表中

linux - 查找当前路径的深度

unix - 如何使用 unix shell 脚本解析数据

C UNIX Shell execvp 回显引号

c++ - C++中的头文件

c++ - <string> 和 <string.h> 之间的区别?

php - DateTime 类的对象无法转换为字符串

unix - 每个程序员都应该知道的最强大的 Unix 命令或脚本示例

java - JTable 标题中的多个可编辑行

php - 如何使用 PHP 一次将数据插入两个 mysql 表中