从文件中提取数据

时间:2014-01-06 07:29:39

标签: bash awk

我有一些文件如下。

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

非常感谢您的帮助!!

2 个答案:

答案 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