如何在sed语句中评估awk?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在sed语句中评估awk?相关的知识,希望对你有一定的参考价值。
对于文件夹中的每个.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 " " "
" >
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
应该将当前的FILENAME
附加到以@
开头的任何行的末尾。
我使用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循环和临时文件的每个文件。但是如果没有更多的反馈,我不想再花费更多的时间来发现我正走向错误的方向。
非常紧张
以上是关于如何在sed语句中评估awk?的主要内容,如果未能解决你的问题,请参考以下文章
使用 sed 或 awk 预处理 C/C++ 代码时如何定位可靠的函数?