【发布时间】:2018-06-25 15:29:58
【问题描述】:
对于文件夹中的每个.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?
【问题讨论】:
-
为什么不只是
awk '/^@/$0=$0 "read1.with.long.identifier"}1' file1 file2 ...?从sed调用awk几乎可以肯定是错误的方法。你能编辑你的数据,使行不超过 40 个字符吗?读者将更容易剪切/粘贴到他们的测试环境中。祝你好运。 -
如果您为每个文件名
need to to this iteratively,您可能需要将文件名保存在变量中? -
看不懂
evaluate awk in a sed statement。 -
你应该在你的问题中简单地告诉 3 件事。 1-您对代码标签中的示例 Input_file 有什么要求。 2- 代码标签中的预期输出样本是什么。 3-到目前为止你尝试了什么。用简单的英语。它将帮助我们为您提供帮助。