Awk 基于另一个文件提取特定行

Awk 基于另一个文件提取特定行,awk,sed,Awk,Sed,我有一个包含文本文件的文件夹。我需要根据另一个文件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/D

我有一个包含文本文件的文件夹。我需要根据另一个文件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
在第3行,
$3
需要更改为
$2

因为星号是
input.txt
中的字段分隔符,所以它前面的(空的,不存在的)字符串被计为$1,后面的文件名被计为$2

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

在命令行上设置两次FS是可疑的。它可能与GNU
awk
一起工作,尽管我不确信;它不适用于大多数其他变体。它适用于所有AWK。将文件之间的FS设置为不同的值是在arg列表中设置变量的极少数有效原因之一。