gpt4 book ai didi

bash - 选择特定字段并将它们写入新文件

转载 作者:行者123 更新时间:2023-12-04 16:18:04 25 4
gpt4 key购买 nike

我的任务是将几个文件汇总到一个 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”代表制表符(对不起,我不知道如何写)。此外示例文件包含更多信息,我只是给了一个“标题”让我们说。

最佳答案

在普通的 bash 中:

for file in *.pdb; do
acc=
def=
src=
loc=
while IFS=$'\t' read -ra fields; do
if [[ ${fields[0]} = "ACCESSION" ]]; then
acc=${fields[1]}
elif [[ ${fields[0]} = "DEFINITION" ]]; then
def=${fields[1]}
elif [[ ${fields[0]} = "SOURCE" ]]; then
src=${fields[1]}
elif [[ ${fields[0]} = "LOCUS" ]]; then
loc=${fields[3]}
fi
done < "$file"
printf '%s\t%s\t%s\t%s\n' "$acc" "$def" "$src" "$loc" >> newFile.txt
done

关于bash - 选择特定字段并将它们写入新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69881942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com