如何在sed语句中评估awk?
对于文件夹中的每个如何在sed语句中评估awk?,awk,sed,filenames,Awk,Sed,Filenames,对于文件夹中的每个.fastq文件,我需要将读取的文件名附加到标题行 假设fastq文件read1.with.long.identifier.fastq的前8行是: @M04803:91:000000000-D3852:1:1102:14324:1448 1:N:0:GTGTCTCT+TGAGCAGT TTTTGTTTCCTCTTCTTATTGTTATTCTTATGTTCATCTGGTATCCCTGCCTGATCCGTGTTCAACCTTGCGAATAGG + 11111B1133B1111BF
.fastq
文件,我需要将读取的文件名附加到标题行
假设fastq文件read1.with.long.identifier.fastq的前8行是:
@M04803:91:000000000-D3852:1:1102:14324:1448 1:N:0:GTGTCTCT+TGAGCAGT
TTTTGTTTCCTCTTCTTATTGTTATTCTTATGTTCATCTGGTATCCCTGCCTGATCCGTGTTCAACCTTGCGAATAGG
+
11111B1133B1111BF3BA33D3B3BDG331DBB33D3A1B1D12BB10BAA0B110//0B2221ABG11//AA/11
@M04803:91:000000000-D3852:1:1102:12470:1826 1:N:0:GTGTCTCT+AGAGCAGT
CCTGGGAGCCTCCGCTTATTGATATGCTTAAGTTCAGCGGGTAGTCCTACCTGATTTGAGGTCAAGTTTCGAGTTTTC
+
1>>1A1B1>>>C1AAEFGGEADFGGHHHHHDGDFHHFHGGCAECGHHGFFHHHHFHHGFFEFHHHHHHHHGGHFGHHH
我想让他们读一下:
@M04803:91:000000000-D3852:1:1102:14324:1448 1:N:0:GTGTCTCT+TGAGCAGT read1.with.long.identifier
TTTTGTTTCCTCTTCTTATTGTTATTCTTATGTTCATCTGGTATCCCTGCCTGATCCGTGTTCAACCTTGCGAATAGG
+
11111B1133B1111BF3BA33D3B3BDG331DBB33D3A1B1D12BB10BAA0B110//0B2221ABG11//AA/11
@M04803:91:000000000-D3852:1:1102:12470:1826 1:N:0:GTGTCTCT+AGAGCAGT read1.with.long.identifier
CCTGGGAGCCTCCGCTTATTGATATGCTTAAGTTCAGCGGGTAGTCCTACCTGATTTGAGGTCAAGTTTCGAGTTTTC
+
1>>1A1B1>>>C1AAEFGGEADFGGHHHHHDGDFHHFHGGCAECGHHGFFHHHHFHHGFFEFHHHHHHHHGGHFGHHH
使用:
cat read1.with.long.identifier.fastq | sed "/^@......:/ s/$/
awk "FILENAME" read1.with.long.identifier.fastq/" | tr "\t" "\n" >
read1_new_headers.fastq
然而,这会产生:
@M04803:91:000000000-D3852:1:1102:14324:1448 1:N:0:GTGTCTCT+TGAGCAGT awk "FILENAME" read1.with.long.identifier.fastq
TTTTGTTTCCTCTTCTTATTGTTATTCTTATGTTCATCTGGTATCCCTGCCTGATCCGTGTTCAACCTTGCGAATAGG
+
11111B1133B1111BF3BA33D3B3BDG331DBB33D3A1B1D12BB10BAA0B110//0B2221ABG11//AA/11
@M04803:91:000000000-D3852:1:1102:12470:1826 1:N:0:GTGTCTCT+AGAGCAGT awk "FILENAME" read1.with.long.identifier.fastq
CCTGGGAGCCTCCGCTTATTGATATGCTTAAGTTCAGCGGGTAGTCCTACCTGATTTGAGGTCAAGTTTCGAGTTTTC
+
1>>1A1B1>>>C1AAEFGGEADFGGHHHHHDGDFHHFHGGCAECGHHGFFHHHHFHHGFFEFHHHHHHHHGGHFGHHH
这是一个非迭代版本。我知道我可以取出awk和FILENAME并粘贴到文件名“read1.with.new.identifier”中,然后得到我需要的,
但在实际数据中,我需要对许多具有不同文件名的文件进行迭代(awk FILENAME I…),并需要一些自动计算文件名的东西。很明显,我的想法是错误的。如何在sed语句中评估awk?现在我了解了
read1.with.long.identifier
实际上是一个文件名,我的示例代码更简单,不需要sed
awk '/^@/{$0=$0 " " FILENAME }1' file1 file2 ... > all_output
应将当前的文件名
附加到以@
开头的任何行的末尾
我的测试使用data.txt
作为生成的文件
@M04803:91:000000000-D3852:1:1102:14324:1448 1:N:0:GTGTCTCT+TGAGCAGT data.txt
TTTTGTTTCCTCTTCTTATTGTTATTCTTATGTTCATCTGGTATCCCTGCCTGATCCGTGTTCAACCTTGCGAATAGG
+
11111B1133B1111BF3BA33D3B3BDG331DBB33D3A1B1D12BB10BAA0B110//0B2221ABG11//AA/11
@M04803:91:000000000-D3852:1:1102:12470:1826 1:N:0:GTGTCTCT+AGAGCAGT data.txt
CCTGGGAGCCTCCGCTTATTGATATGCTTAAGTTCAGCGGGTAGTCCTACCTGATTTGAGGTCAAGTTTCGAGTTTTC
+
1>>1A1B1>>>C1AAEFGGEADFGGHHHHHDGDFHHFHGGCAECGHHGFFHHHHFHHGFFEFHHHHHHHHGGHFGHHH
如果需要覆盖每个需要for循环和临时文件的文件。但是如果没有更多的反馈,我不想再花更多的时间去发现我走错了方向
IHTH为什么不干脆
awk'/^@/$0=$0“read1.with.long.identifier”}1“file1 file2…
?从sed
调用awk
几乎肯定是错误的方法。您是否可以编辑数据,使行长度不超过40个字符?读者可以更容易地剪切/粘贴到他们的测试环境中。祝你好运。如果你需要对每个文件名进行迭代,你可能需要将文件名保存在一个变量中?我不理解在sed语句中计算awk
。你应该简单地告诉你问题中的三件事。1-您对代码标签中的示例输入文件有什么要求。2-代码标记中的预期输出示例。3-到目前为止你都尝试了什么。用简单明了的英语。这将帮助我们帮助你。很好。虽然OP看起来希望从附加到文件行的字符串中删除扩展名.fastq
。去除“.txt”
的最快方法是什么?也许只是简单的sub(/\.txt$/,“”)
?@ghoti:好的捕获。我必须插入f=FILENAME;sub(/\.txt/,“”,f)
并将文件名
和行尾替换为f
。我将等待O.P.的消息,如果这是一个要求或输入错误,在更改上述代码之前。谢谢大家,祝大家好运!我想awk'/^@/{$0=$0”文件名;sub(/\.txt$/,“”)1'
就足够了,。对我来说很早。忘记了默认情况下sub()
修改$0
。谢谢