linux – bash用空替换连接多个文件(-e选项)

前端之家收集整理的这篇文章主要介绍了linux – bash用空替换连接多个文件(-e选项)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码将多个文件连接在一起.它工作正常,但我想将空值替换为0,所以我使用-e“0”.但它不起作用.
有任何想法吗?
  1. for k in `ls file?`
  2. do
  3. if [ -a final.results ]
  4. then
  5. join -a1 -a2 -e "0" final.results $k > tmp.res
  6. mv tmp.res final.results
  7. else
  8. cp $k final.results
  9. fi
  10.  
  11. done

例:

  1. file1:
  2. a 1
  3. b 2
  4. file2:
  5. a 1
  6. c 2
  7. file3:
  8. b 1
  9. d 2
  10.  
  11. Results:
  12. a 1 0 1 0
  13. b 2 1 0
  14. c 2
  15. d 2
  16.  
  17. expected:
  18. a 1 1 0
  19. b 2 0 1
  20. c 0 2 0
  21. d 0 0 2

解决方法

它的记录很少,但在使用join时,-e选项只能与-o选项一起使用.每次循环时都需要修改订单字符串.以下代码生成所需的输出.
  1. i=3
  2. orderl='0,1.2'
  3. orderr=',2.2'
  4. for k in $(ls file?)
  5. do
  6. if [ -a final.results ]
  7. then
  8. join -a1 -a2 -e "0" -o "$orderl$orderr" final.results $k > tmp.res
  9. orderl="$orderl,1.$i"
  10. i=$((i+1))
  11. mv tmp.res final.results
  12. else
  13. cp $k final.results
  14. fi
  15. done

如你所见,它开始变得凌乱.如果你需要进一步扩展这一点,可能值得推迟使用更强大的工具,如awk或python.

猜你在找的Linux相关文章