我有一些文件如下。
FILE1.TXT
145 THR P Dl -91.52 173.90 179.36 66.67 999.99 999.99 999.99
146 SER C Cl -125.16 155.03 178.68 67.76 999.99 999.99 999.99
147 MET T Ee -52.96 -35.79 -179.13 -65.71 -58.28 -60.34 999.99
151 TYR C Ck -125.69 145.40 -179.22 -54.88 -59.25 999.99 999.99
156 ARG E Bk -136.06 137.44 -179.24 -55.85 173.98 48.70 -165.24
158 ILE E Dj -98.77 116.42 -179.37 -51.55 -54.79 999.99 999.99
file2.txt
33 PHE C Ch -120.45 41.86 -177.95 -56.61 -71.40 999.99 999.99
36 VAL C Ck -119.10 147.98 -177.54 94.59 999.99 999.99 999.99
41 LEU H Ee -61.78 -50.08 179.33 175.84 50.72 999.99 999.99
42 THR H Ee -60.72 -40.55 178.79 -65.97 999.99 999.99 999.99
如果第三列是H,我需要提取第二列。我使用以下程序来提取此
awk '{
if (FNR == 1 ) print newline ">" FILENAME
if ($3 == "H") {
newline="\n";
printf $2
}
}
END { printf "\n"}' *.txt>output
上述程序的输出
>file1.txt
THRSERMETTYRARGILE
>file2.txt
PHEVALLEUTHR
我想使用下表得到这样的输出而不是上面的输出。例如,THR表示T,SER表示S ....
>file1.txt
TSMYRI
>file2.txt
FVLT
ALA A
ARG R
ASN N
ASP D
CYS C
GLU E
GLN Q
GLY G
HIS H
ILE I
LEU L
LYS K
MET M
PHE F
PRO P
SER S
THR T
TRP W
TYR Y
VAL V
非常感谢您的帮助!!
答案 0 :(得分:2)
使用关联数组将每个标签映射到缩写。
BEGIN { a["THR"]="T"; a["TYR"]="Y"; ... }
然后只需打印a[$2]
而不是$2
。
答案 1 :(得分:0)
如果我理解正确,请尝试:
gawk 'FNR==1 {print "\n>" FILENAME} $3=="H" {printf substr($2,1,1)} END {print ""}' *.txt