在awk
下面,我试图匹配file1
中的每行到file2
中的一行。如果在两个文件之间没有找到匹配,则打印值file1
后面跟着unknown
。在第一个awk
中,我收到else
语句附近的Synatax错误,第二个语法为next
。我不确定为什么语法错误需要else
来捕获unknown
条件,next
告诉awk
要处理下一行,对不对,或者我误以为是在思考?这两个文件都是space-delimited
,谢谢:)。awk打印匹配行或“未知”如果不匹配
file1的
A2M
A4GALT
A4GNT
ABC34
file2的
A2M AD
ABC34 AD/AR
期望的输出
A2M AD
A4GALT unknown
A4GNT unknown
ABC34 AD/AR
AWK
awk 'NR==FNR{A[$1];next}$1 in A else { print "unknown" }' file1 file2
awk 'BEGIN{FS=OFS="\t"} # define field and output seperators
FNR==NR{ # process each field in line of `file1`
for (i=1; i <= n; i++) { # execute loop
d[$1] = $1 # match first element and read into key d
}
}
next # process next line
}{print $1, ($1 in d?d[$1]:"unknown")}' file1 file2 # if no match
print $1 followed by unknown
你有一个语法错误,因为你的报价是不平衡的。尝试将你的awk代码移动到一个文件中 - 关于awk的一个鲜为人知的事实是,你可以像使用任何其他编程语言一样将你的代码放在一个文件中,你不需要把它全部用单行来完成。 –
如果这个事实“鲜为人知”,我会感到惊讶,它正好位于每个awk手册页,书和POSIX规范的顶部/前面,并且经常在这里和其他论坛的答案中使用。 –