aix shell脚本如何实现将文本中每一行第10列到20列之间含有|的替换成/,谢谢各位大侠!

解决方案 »

  1.   

    用awk并用其内建函数gsub
      

  2.   

    Administrator@SKY-20150322QZZ MINGW32 ~/Desktop
    $ cat test.in
    1 2 3 4 5 6 7 8 9 10 11| 12 13 14 15 16|| 17 18 19 20 21| 22 23
    1 2 3 4 5 6 7 8 9 1| 11 12 13 14 || 16 17| 18 19 20 ||21 22 23Administrator@SKY-20150322QZZ MINGW32 ~/Desktop
    $ cat test.in | awk '{ split($0,a," "); i = 1; while (i <= length(a)) {if (i >= 10 && i <= 20) gsub(/\|/, "/", a[i]); printf a[i]  " "; i++;} printf"\n" }'
    1 2 3 4 5 6 7 8 9 10 11/ 12 13 14 15 16// 17 18 19 20 21| 22 23
    1 2 3 4 5 6 7 8 9 1/ 11 12 13 14 // 16 17/ 18 19 20 ||21 22 23Administrator@SKY-20150322QZZ MINGW32 ~/Desktop
      

  3.   

    | 1  |180118|180118|bgykabcd|    |223320181000077286-A01/bgykabcd/bgykabcd|2233|            448.35|                  |       16,519,685.66|06015/9880810/110450556|bgykabcd                  |
     |    |      |      |        |    |20181000077286-A01                           |                  |                  |                    |                       |                          |谢谢指点,我是这样的数据,36-80列的|需要替换成/,不是固定的空格分隔
      

  4.   

    首先awk 将每一列分为三段0-35,36-80,81-end ,然后第二段调用replace函数,最后,整合输出...