【发布时间】:2021-12-21 04:51:52
【问题描述】:
我的任务是将一些文件汇总到一个 tsv 文件中。我必须从文件列表中选择特定数据并将其写入 tsv 文件中的一行制表符分隔的列。文件中的每一行都有一个“名称”作为第一列,因此很容易过滤数据($1 == "NAME")。一个文件 == tsv 中的一行。到目前为止,我写了这个:
#! /bin/bash
cat > newFile.txt
for f in *.pdb; do
awk '$1 == "ACCESSION" {print $2}' ORS="/t" "$f" >> newFile.txt
awk '$1 == "DEFINITION" {print $2}' ORS="/t" "$f" >> newFile.txt
awk '$1 == "SOURCE" {print $2}' ORS="/t" "$f" >> newFile.txt
awk '$1 == "LOCUS" {print$4}' ORS="/r" "$f" >> newFile.txt
done
显然,这种代码的暴行是行不通的。是否可以修改我写的内容并使用 awk 完成任务?
文件示例:
LOCUS \t NM_123456 \t 2000bp \t mRNA
DEFINITION \t Very nice gene from a very nice mouse
ACCESSION \t NM_123456
VERSION \t 1.000
SOURCE \t Very nice mouse
最终结果:
NM_123456 /t Very nice gene from a very nice mouse /t Very nice mouse /t mRNA
NM_345678 /t Not so nice gene from an angry elephant /t Angry Elephant /t mRNA
"/t" 代表一个制表符(我不知道怎么写,抱歉)。示例文件还包含更多信息,我只是给出了一个“标题”。
【问题讨论】:
-
您能否提供示例文件和预期输出?
-
请edit您对示例的问题,不要将其添加到cmets :)
-
嘿。我已按照您的要求修改了问题。我希望它足够清楚^^
-
恭喜!你能告诉我们一个文件是否只能有一个同名字段吗? (即,只有一个 ACCESSION / DEFINITION / LOCUS / VERSION / SOURCE)
-
是的,字段名称是唯一的!