我有多个文件,如下所示。它们以制表符分隔。对于我想要取出的所有文件第1列以及以 XF:Z:开头的列。这会给我输出1 文件名是 htseqoutput * .sam.sam ,其中*会有所不同。我不确定awk函数的使用,以及for循环是否正确。
// fails:
$.post({
url: "/example/" + this.id,
// ...
});
// works:
$.post("/example/" + this.id);
输入示例
for f in htseqoutput*.sam.sam
do
awk ????? "$f" > “out${f#htseqoutput}”
done
输出1:
AACAGATGATGAACTTATTGACGGGCGGACAGGAACTGTGTGCTGATTGTC_11 16 chr22 39715068 24 51M * 0 0 GACAATCAGCACACAGTTCCTGTCCGCCCGTCAATAAGTTCATCATCTGTT IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII AS:i:-12 XN:i:0 XM:i:2 XO:i:0 XG:i:0 NM:i:2 MD:Z:18T31G0 YT:Z:UU XF:Z:SNORD43
GTTTCCTTAGTGTAGCGGTTATCACATTCGCCT_0 16 chr19 4724687 40 33M * 0 0 AGGCGAATGTGATAACCGCTACACTAAGGAAAC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII AS:i:-6 XN:i:0 XM:i:1 XO:i:0 XG:i:0 NM:i:1 MD:Z:26C6 YT:Z:UU XF:Z:tRNA
TCGACTCCCGGTGTGGGAACC_0 16 chr13 45492060 23 21M * 0 0 GGTTCCCACACCGGGAGTCGA IIIIIIIIIIIIIIIIIIIII AS:i:-6 XN:i:0 XM:i:1 XO:i:0 XG:i:0 NM:i:1 MD:Z:0C20 YT:Z:UU XF:Z:tRNA
答案 0 :(得分:2)
好像你可以使用sed:
var file = new Blob([data], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
这将捕获行开头的部分和sed -r 's/^([ACGT0-9_]+).*XF:Z:([[:alnum:]]+).*/\1\t\2/' file
后面的字母数字部分并输出它们,由制表符分隔。这种方法的一个潜在优势是它可以独立于XF:Z:
字符串的位置工作。
您的循环看起来没问题(您可以使用此sed命令代替awk部分)但要小心您的引号。应使用XF:Z:
,而不是"
/ “
。
或者,如果您更喜欢awk(假设您感兴趣的位始终是最后一个字段的一部分),您可以使用自定义字段分隔符:
”
这可选择将awk -F'[[:space:]](XF:Z:)?' -v OFS='\t' '{print $1, $NF}' file
部分添加到字段分隔符中,以便从最后一个字段的开头删除它。
答案 1 :(得分:1)
如果列号为" XF:Z:"您可以尝试总是在最后
awk 'BEGIN{OFS="\t"}{n=split($NF,a,":"); print $1, a[n]}' file.sam
你明白了,
AACAGATGATGAACTTATTGACGGGCGGACAGGAACTGTGTGCTGATTGTC_11 SNORD43 GTTTCCTTAGTGTAGCGGTTATCACATTCGCCT_0 tRNA TCGACTCCCGGTGTGGGAACC_0 tRNA
或者,如果此列是每个文件的可变位置
awk 'BEGIN{OFS="\t"}
FNR==1{
for(i=1;i<=NF;i++){
if($i ~ /^XF:Z:/) break
}
}
{n=split($i,a,":"); print $1, a[n]}' file.sam