我有以下代码将多个文件连接在一起.它工作正常,但我想将空值替换为0,所以我使用-e“0”.但它不起作用.
有任何想法吗?
有任何想法吗?
for k in `ls file?` do if [ -a final.results ] then join -a1 -a2 -e "0" final.results $k > tmp.res mv tmp.res final.results else cp $k final.results fi done
例:
file1: a 1 b 2 file2: a 1 c 2 file3: b 1 d 2 Results: a 1 0 1 0 b 2 1 0 c 2 d 2 expected: a 1 1 0 b 2 0 1 c 0 2 0 d 0 0 2
解决方法
它的记录很少,但在使用join时,-e选项只能与-o选项一起使用.每次循环时都需要修改订单字符串.以下代码应生成所需的输出.
i=3 orderl='0,1.2' orderr=',2.2' for k in $(ls file?) do if [ -a final.results ] then join -a1 -a2 -e "0" -o "$orderl$orderr" final.results $k > tmp.res orderl="$orderl,1.$i" i=$((i+1)) mv tmp.res final.results else cp $k final.results fi done
如你所见,它开始变得凌乱.如果你需要进一步扩展这一点,可能值得推迟使用更强大的工具,如awk或python.
原文地址:https://www.jb51.cc/linux/393303.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。