如何在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
。谢谢