我有2个文本文件。 “A.txt”包含
A 1 AB ... 1 5 -3 4.5 (contains 11 columns. So "4.5" is in the 11th column)
A 2 BC ... -2 3 8 9.2
A 3 WE ... 2 3 8 5.2
A 4 RT ... 23 2 24 4.1
...
END
“B.txt”类似,只是最后的2列与“A.txt”的列不同。另一个区别是“B.txt”包含一些不在“A.txt”中的附加行。例如,第三行A 3 QEW ... 5 23 34 5
位于“B.txt”但不包含在“A.txt”中
A 1 AB ... 1 5 4 9
A 2 BC ... -2 3 1 0
A 3 QEW ... 5 23 34 5
A 4 WE ... 2 3 -7 56
A 5 RT ... 23 2 -5 14
...
END
我想要做的是提取“A.txt”每行中最后一列的值,并将其附加到“B.txt”中的相应行。并且对于“B.txt”中不在“A.txt”中的每一行,如果第3列元素以字母“Q”开头(例如,QEW),则我想要附加值1,否则返回值2 。所以输出应该看起来像
A 1 AB ... 1 5 4 9 4.5
A 2 BC ... -2 3 1 0 9.2
A 3 QEW ... 5 23 34 5 1
A 4 WE ... 2 3 -7 56 5.2
A 5 RT ... 23 2 -5 14 4.1
...
END
以下awk
命令有效:
NR==FNR{
arr[$3] = $11
next
}
{
if ($3 in arr){
print($0, arr[$3])
}else if ($3 == "^Q"){
print($0, "2")
}else{
print($0, "1")
}
}
随着
awk -f script.awk f1 f2
唯一的问题是我得到的输出是
A 1 AB ... 1 5 4 9
4.5
A 2 BC ... -2 3 1 0
9.2
A 3 QEW ... 5 23 34 5
1
A 4 WE ... 2 3 -7 56
5.2
A 5 RT ... 23 2 -5 14
4.1
...
END
这是错误的,因为最后一列中的值应该在这样的新行中输入。我怎样才能解决这个问题?是否有其他命令我可以使用而不是我列出的命令?
答案 0 :(得分:0)
您的代码和规范与Q不匹配,无论如何,这是一个有效的脚本
$ awk 'NR==FNR{a[$3]=$NF; next}
$3 in a{print $0, a[$3]; next}
{print $0, ($3~/^Q/)?1:2}' f1 f2
print通常不是作为函数编写的,更惯用的是print $0,1
也不需要引用1和2。