在下面的awk
中,我尝试将file1
中的每一行与file2
中的一行匹配。如果在两个文件之间未找到匹配项,则会打印$1
后跟file1
的{{1}}值。在第一个unknown
中,我在awk
语句附近收到了synatax错误,在else
的第二个语法中收到了synatax错误。我不确定为什么需要next
语法错误来捕获else
条件而unknown
告诉next
来处理下一行,对,或者我错了在我的思考?这两个文件都是awk
,谢谢:)。
文件1
space-delimited
file2的
A2M
A4GALT
A4GNT
ABC34
所需的输出
A2M AD
ABC34 AD/AR
AWK
A2M AD
A4GALT unknown
A4GNT unknown
ABC34 AD/AR
答案 0 :(得分:1)
简单 加入 + 排序 单行以达到目标:
join -a1 -a2 -e "unknown" -o1.1,2.2 <(sort file1) <(sort file2)
输出:
A2M AD
A4GALT unknown
A4GNT unknown
ABC34 AD/AR
答案 1 :(得分:1)
awk 'NR==FNR{a[$1]=$2;next} {print $1, ($1 in a ? a[$1] : "unknown")}' file2 file1
第一个脚本中的语法错误是:
$1 in A else
你可能意味着:
!($1 in A)
但是我很好奇你是怎么想出来的 - 你用condition else
作为否定condition
的有效语法的语言是什么?您已经问了几十个问题并收到了答案 - 他们都没有使用!
运算符吗?
第二个脚本中的语法错误是因为next
超出了任何{...}
对,并且您有}
个太多。你可以把它们算上来看看。
答案 2 :(得分:1)
我想出了这个:
awk 'NR==FNR{ a[$1]; next }$1 in a{ print $1,$2; delete a[$1] }END{ for ( i in a ) print i, "unknown" }' file1 file2 | sort
输出:
A2M AD
A4GALT unknown
A4GNT unknown
ABC34 AD/AR