如何在文件中交替选择行中的特定列

如何在文件中交替选择行中的特定列

我有一个文本文件,其中包含蛋白质序列信息和相关序列。

>4YDY_1|Chains A, C[auth B]|DARPIN 44C12V5|synthetic construct (32630)
MRGSHHHHHHGSDLGKKLLEAARAGQDDEVRILMANGADVNALDDSGYTPLHLAAEDGHLEIVEVLLKHGADVNAADRLGDTPLHLAAFVGHLEIVEVLLKAGADVNAVDLAGVTPLHVAAFYGHLEIVEVLLKAGADVNAQDKFGKTPADIAADNGHEDIAEVLQKLN

对于这些链,有一个序列。我想遍历文件的每一行并仅保留 ID 和第一个链,删除紧跟在 ID (_1) 后面的实体编号,在 ID 和链之间放置一个逗号,然后删除行中的任何其他内容。此操作应在一行是和一行否时执行。此外,还有一些序列(第二行中的字母)少于 50 个字母。我想删除每个包含少于 50 个字母的序列及其 ID,即其上方的行。

为了清楚起见,这是我在文件中寻找的每个序列的输出:

>4YDY:A
MRGSHHHHHHGSDLGKKLLEAARAGQDDEVRILMANGADVNALDDSGYTPLHLAAEDGHLEIVEVLLKHGADVNAADRLGDTPLHLAAFVGHLEIVEVLLKAGADVNAVDLAGVTPLHVAAFYGHLEIVEVLLKAGADVNAQDKFGKTPADIAADNGHEDIAEVLQKLN

先感谢您。

答案1

这已经过测试并且与您的示例兼容。

#!/bin/bash
# Read the file two lines at a time
while read -r one; do
   read -r two
   # If the second line is fifty or more characters long
   if ((${#two} >= 50)); then
     IFS='|' read -ra f <<< "$one"
     id="${f[0]}"
     # Remove the underscore "_" and everything after it from the ID
     id=${id%_*}
     # Grab the first chain
     chain="${f[1]}"
     chain=$(cut -d ' ' -f2 <<<"$chain" | cut -d ',' -f1)
     one="$id:$chain" 
     # Print the two lines in the desired format
     printf '%s\n' "$one" "$two"
   fi
done < file.txt

相关内容