Awk 基于另一个文件提取特定行
我有一个包含文本文件的文件夹。我需要根据另一个文件input.txt从该文件夹的文件中提取特定行。我尝试了以下代码。但它不起作用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
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列表中设置变量的极少数有效原因之一。