unix – 将标头插入文件

前端之家收集整理的这篇文章主要介绍了unix – 将标头插入文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想听听你如何插入标题行(文件中的所有行)到另一个文件(更大,几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,Description="Total Depth">
##INFO=<ID=AF,Number=.,Type=Float,Description="Allele Frequency">
##INFO=<ID=AA,Type=String,Description="Ancestral Allele">
##INFO=<ID=DB,Number=0,Type=Flag,Description="dbSNP membership,build 129">
##INFO=<ID=H2,Description="HapMap2 membership">
##FILTER=<ID=q10,Description="Quality below 10">
##FILTER=<ID=s50,Description="Less than 50% of samples have data">
##FORMAT=<ID=GT,Description="Genotype">
##FORMAT=<ID=GQ,Description="Genotype Quality">
##FORMAT=<ID=DP,Description="Read Depth">
##FORMAT=<ID=HQ,Number=2,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

该命令读取第0行之后(第1行之前)的标题内容,然后其他所有内容都保持不变.这并不像猫那么快.

使用awk的类似构造是:

header="/name/of/file/containing/header"
for file in "$@"
do
    awk '{print}' "$header" "$file" > /tmp/xx.$$
    mv /tmp/xx.$$"$file"
done

这只是打印输出上的每个输入行;再次,不像猫那么快.

cat over sed或awk的另一个优点;即使大文件主要是二进制数据(它也不知道文件内容),cat也会工作. sed和awk都设计用于处理分成行的数据;虽然现代版本可能会很好地处理二进制数据,但它并不是它们的设计目标.

猜你在找的Bash相关文章