在制表符分隔文件中添加两个新列

在制表符分隔文件中添加两个新列

我必须在制表符分隔文件的末尾添加两个新列,其中包含特定条目。我的文件看起来像这样

chr2    88861474    88861574    IGKJ2
chr2    88861170    88861270    IGKJ3
chr2    88860835    88860935    IGKJ4
chr2    88860517    88860617    IGKJ5

以下是我的预期输出

chr2    88861474    88861574    IGKJ2   0   -
chr2    88861170    88861270    IGKJ3   0   -
chr2    88860835    88860935    IGKJ4   0   -
chr2    88860517    88860617    IGKJ5   0   -

我可以使用0-条目创建另一个文件,并使用paste命令我可以将新创建​​的文件与原始文件合并以获得所需的输出,但我正在寻找其他选项(使用awksed

答案1

在 awk 中,它看起来像这样:

awk -v OFS='\t' '{print $0, "0", "-"}' inputfile

OFS将输出分隔符设置为tab,然后在每行后打印所需的字段。

答案2

如果您sed支持\t其命令的替换部分s,您可以尝试

sed 's/$/\t0\t-/' inputfile

如果没有,并且您的 shell 支持 ksh93 样式$'...'的引号形式:

sed $'s/$/\t0\t-/' inputfile

如果没有,您可以随时执行以下操作:

TAB=$(printf '\t')
sed "s/\$/${TAB}0${TAB}-/" inputfile

答案3

仅使用bash

#!/bin/bash

while read line
do
   printf "%s\t0\t-\n" "${line}"
done < inputfile

答案4

awk 'BEGIN{OFS="\t"}{$(NF+1)="0\t-";print }' filename

输出

chr2    88861474    88861574    IGKJ2   0   -
chr2    88861170    88861270    IGKJ3   0   -
chr2    88860835    88860935    IGKJ4   0   -
chr2    88860517    88860617    IGKJ5   0   -

相关内容