bash - 使用awk或sed在bash中进行条件查找?
问题描述
我有这两个文件(都有标题),两个文件的每一行都以第一列的日期开头,格式相同。分隔符是一个分号。
在第一个文件的第 9 列,我只能有这些 id:UK 或 JPN 或 EUR。
我需要将 file1 与来自 file2 的 intel 与相应的日期 intel 聚合起来。
当然,我可以尝试使用 bash 脚本和“for”循环来完成,但我确信资源方面,使用 awk 或其他 bash 命令会更好……如果可能的话!
提前感谢您的任何提示。
ps:我尝试采用这种方法没有成功:https ://unix.stackexchange.com/questions/428861/vlookup-equivalent-in-awk-scripting
第一个文件:
Date;$2;$3;$4;$5;$6;$7;$8;Id
2018-01-01; ;UK
2018-01-02; ;JPN
2018-01-03; ;EUR
2018-01-04; ;JPN
第二个文件:
Date;UKDIR;JPNDIR;EURDIR
2018-01-01;1;2;3
2018-01-02;4;5;6
2018-01-03;7;8;9
2018-01-04;11;10;12
预期收益
Date;$2;$3;$4;$5;$6;$7;$8;Id ;Intel
2018-01-01; ;UK ;1
2018-01-02; ;JPN ;5
2018-01-03; ;EUR ;9
2018-01-04; ;JPN ;10
解决方案
你可以使用这个awk
:
awk -F';' -v OFS='; ' 'NR==1 { for (i=2; i<=NF; i++) h[i]=$i; next }
FNR==NR { for (i=2; i<=NF; i++) a[$1,h[i]]=$i; next }
FNR==1 { print $0, "Intel"; next }
{ print $0, a[$1,$NF "DIR"] }' file2 file1
Date;$2;$3;$4;$5;$6;$7;$8;Id; Intel
2018-01-01; ;UK; 1
2018-01-02; ;JPN; 5
2018-01-03; ;EUR; 9
2018-01-04; ;JPN; 10
推荐阅读
- excel - 宏将行移动到另一个工作表但忽略新工作表中的公式
- pandas - 熊猫似乎两次合并相同的数据框
- angular - for 循环的 Angular jasmine 测试用例(错误:预期 $.length = 11 等于 3)
- batch-file - 在批处理文件中,如何抑制 FOR /F 命令中的命令的输出
- firebase - EACCES:全局安装 NPM 包时权限被拒绝
- jpeg - PDFBox - java.lang.UnsatisfiedLinkError: jpeg(库已经加载到另一个类加载器中)
- flutter - Flutter 如何拥有多个列表
- python - 从 shell 获取输入时 Pygame 窗口崩溃
- spring-boot - 跟踪对 Spring Boot 应用程序的传入请求
- javascript - 为 Sequelize 创建中间 BaseModel 类