excel - 用 awk 实现类似 Excel-vlookup 的函数
问题描述
我有一个关于用 awk 实现 vlookup 函数的问题。我有一个 csv 文件,其中包含这样的 id-score 对(比如 1.csv):
id,score
1,16
3,12
5,13
11,8
13,32
17,37
23,74
29,7
31,70
41,83
有“未得分”的家伙。我还有一个 csv 文件,其中包括所有注册的人,都像这样得分和不得分(比如 2.csv)(我因空间不足而转置)
id,1,3,5,7,11,13,17,19,23,29,31,37,41
我想根据第二个 csv 文件生成 id-score 对,以便包括得分和不得分的人。对于没有得分的人,将使用 NAN 而不是数字。
换句话说,最终结果希望是这样的:
id,score
1,16
3,12
5,13
7,NAN
11,8
13,32
17,37
19,NAN
23,74
29,7
31,70
37,NAN
41,83
当我尝试使用以下awk
命令创建一个新表时,它对我不起作用。提前感谢您的任何建议。
awk 'FNR==NR{a[$1]++; next} {print $0, (a[$1]) ? a[$2] : "NAN"}' 1.csv 2.csv
解决方案
bash
和join
:_
echo "id,score"
join --header -j 1 -t ',' <(sort 1.csv | grep -v '^id') <(tr ',' '\n' < 2.csv | grep -v '^id' | sort) -e "NAN" -a 2 -o 2.1,1.2 | sort -n
输出:
身份证,分数 1,16 3,12 5,13 7、南 11,8 13,32 17,37 19、南 23,74 29,7 31,70 37、南 41,83
看:man join
推荐阅读
- javascript - 我们可以使用 - MyVar.addEventListener("change" , function(){}); 观察变量值的变化吗?
- python - Tensorflow saver.restore() 没有恢复我的模型检查点
- elixir - PostGIS 数据存储不正确
- docker - 如何找到 docker 镜像的构建时间?
- javascript - Google Apps 脚本 - 抛出 ParseError 的可选链接
- javascript - React 将回调函数传递给多个子组件
- lua - 如何打印星星和散列的模式,以便在lua编程中四颗星之后应该有一个散列
- java - clickhouse 使用 JDBC 引擎错误“找不到合适的驱动程序”
- angular - 如何以角度获取http响应的状态码?
- scala - Scala spark我如何对两列求和