我正在尝试使用awk在第一个txt电子表格中根据“标题”列进行搜索,如果匹配,则使用此行更改第二个文件。
我第一次尝试使用comm,但它不起作用。 我找不到任何类似的话题。有人能帮助我吗?
FILE1
Title score atividade
ZINC79350772 -8.435 1
ZINC71820127 -8.371 1
ZINC65370023 -8.265 1
ZINC13151660 -8.203 1
FILE2
ZINC79350772 -8.435 0
ZINC71820127 -8.371 0
ZINC65370023 -8.265 0
ZINC78807290 -8.256 0
期望的输出
ZINC79350772 -8.435 1
ZINC71820127 -8.371 1
ZINC65370023 -8.265 1
ZINC78807290 -8.256 0
答案 0 :(得分:2)
试试这个测试版本:
(cat FILE1; printf "NEXT_FILE\n"; cat FILE2) | awk '{if ($1 ~ /NEXT_FILE/) {secondfile=1;} else if (!secondfile && NR>1) {score[$1]=$2; actividade[$1]=$3;} else if (secondfile) { if (score[$1]) {$2=score[$1]; $3=actividade[$1];} print;}}' > DESIRED_OUTPUT
cat DESIRED_OUTPUT
ZINC79350772 -8.435 1
ZINC71820127 -8.371 1
ZINC65370023 -8.265 1
ZINC78807290 -8.256 0
正在使用关联数组,如着名的Awk - A Tutorial and Introduction - by Bruce Barnett
中所述在阅读FILE1时会填充关联数组得分和 actividade 。
当读取FILE2时,如果首先遇到当前标题列,则打印它,否则将打印首先在FILE1中找到的值。
答案 1 :(得分:0)
awk
救援!
$ awk 'NR==FNR{a[$1]=$3;next} $1 in a{$3=a[$1]} 1' file1 file2
ZINC79350772 -8.435 1
ZINC71820127 -8.371 1
ZINC65370023 -8.265 1
ZINC78807290 -8.256 0