我必须在制表符分隔文件的末尾添加两个新列,其中包含特定条目。我的文件看起来像这样
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
命令我可以将新创建的文件与原始文件合并以获得所需的输出,但我正在寻找其他选项(使用awk
或sed
)
答案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 -