2015-11-08 57 views
0

我有一个包含文本文件的文件夹。我需要根据另一个文件input.txt从该文件夹的文件中提取特定行。我试了下面的代码。但它不起作用。基于另一个文件提取特定行

awk ' 
    NR==FNR{ 
    if(NF>1)f=$3 
    else A[f,$1] 
    next 
    } 
    (FILENAME,$3) in A { 
    print > (todir "/" FILENAME) 
    } 
' todir=/home/alan/Desktop/output FS=\* /home/alan/Desktop/input.txt FS=" " * 



file1  
PHE .0  10 .0  0 
ASP 59.8 11 59.8 0  
LEU 66.8 15 66.8 0 
ARG 21.0 16 21.0 0 

file2 
SER 57.9 43 57.9 0 
PHE 2.4  44 2.4  0 
GLN 86.1 49 83.2 2.9 
THR 33.2 50 33.2 0 
SER 10.2 51 .9  9.3 

input.txt 

*file1 
10 
16 
*file2 
43 
44 
49 

Desired output 

file1 
PHE 0  10 0  0 
ARG 21.0 16 21.0 0 

file2 
SER 57.9 43 57.9 0 
PHE 2.4  44 2.4  0 
GLN 86.1 49 83.2 2.9 
+0

在命令行上设置FS两次是可疑的。它可能适用于GNU'awk',尽管我不确信;它不会与大多数其他变体。 –

+1

它将适用于所有的awks。将FS设置为文件之间的不同值是在arg列表中设置变量的极少数有效理由之一。 –

回答

0

在第3行, $3需要被改变到$2

由于星号input.txt字段分隔符,所述(空的,不存在)之前它串计为$ 1和它之后当属$ 2的文件名。

awk ' 
    NR==FNR{ 
    if(NF>1)f=$2 
    else A[f,$1] 
    next 
    } 
+0

非常感谢。 – alan

相关问题