LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: tahaomei

请问如下一段 sed或 awk代码怎么写?对我来说,比较难哦

[复制链接]
发表于 2007-1-22 10:48:10 | 显示全部楼层
你把cat -n yourcodefile打出来的结果给贴出来巴
这样看太费劲了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-22 10:52:32 | 显示全部楼层
已经将格式转换了,你再看看吧
回复 支持 反对

使用道具 举报

发表于 2007-1-22 10:53:16 | 显示全部楼层
找到毛病了把“$x”改成$x
你要判断的是整数不是字符串.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-22 10:55:09 | 显示全部楼层
好的,我试下看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-22 10:58:10 | 显示全部楼层
不行啊,还是这个问题
回复 支持 反对

使用道具 举报

发表于 2007-1-22 11:01:33 | 显示全部楼层
看chinaunix版,你问的问题.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-22 11:16:25 | 显示全部楼层
刚才在chinaunix找到原因了,是 应该是`expr $x + 1`要有空格.

但是又出现如下问题


我先将我的全部源代码给出来



  1.      1        #!/bin/bash
  2.      2        #
  3.      3        #   Shell scripts of the automatic running tasks for the
  4.      4        #   grand canonical Monte Carlo simulation of CMK-1 adsorption
  5.      5        #
  6.      6        #   Author: Xuan Peng
  7.      7        #   Date: 2007.1.19
  8.      8       
  9.      9        ### Some self-defining variables setting
  10.     10            ROOT_DIRECTORY=/export/home/pengx/testsh
  11.     11            WORK_DIRECTORY=$ROOT_DIRECTORY/work
  12.     12            TASKS_DIRECTORY=$ROOT_DIRECTORY/tasks
  13.     13            RESULTS_DIRECTORY=$ROOT_DIRECTORY/results
  14.     14       
  15.     15            PORE_WIDTH_DIRECTORY=(0.3549 0.7098)
  16.     16       
  17.     17            PRESSURE_DIRECTORY=(1.00e-08 2.50e-08 5.00e-08)
  18.     18       
  19.     19            RESULT_FILES=(rho nk ucm ucf ucp dh dhuff dhufp adswt adsmgg adsmmolg adsgcm3 adsmmolcm3 fracfill)
  20.     20       
  21.     21       
  22.     22        ### Some variables to make the below more readable
  23.     23            LS=/bin/ls
  24.     24            SED=/bin/sed
  25.     25            AWK=/bin/awk
  26.     26            BSUB=/export/lsf/6.2/linux2.6-glibc2.3-x86_64/bin/bsub
  27.     27       
  28.     28            FC=/export/intel/compiler/bin/ifort
  29.     29            FFLAGS="-tpp7 -O3 -i-static -static-libcxa"
  30.     30       
  31.     31       
  32.     32        ### make required directory
  33.     33            echo -ne "Making required directories ........................\t"
  34.     34            if [ ! -d $ROOT_DIRECTORY ]; then
  35.     35                mkdir -p $ROOT_DIRECTORY
  36.     36            fi
  37.     37            if [ ! -d $WORK_DIRECTORY ]; then
  38.     38                mkdir -p $WORK_DIRECTORY
  39.     39            fi
  40.     40            if [ ! -d $TASKS_DIRECTORY ]; then
  41.     41                mkdir -p $TASKS_DIRECTORY
  42.     42            fi
  43.     43            if [ ! -d $RESULTS_DIRECTORY ]; then
  44.     44                mkdir -p $RESULTS_DIRECTORY
  45.     45            fi
  46.     46            cd $WORK_DIRECTORY
  47.     47            for i in ${PORE_WIDTH_DIRECTORY[@]}
  48.     48            do
  49.     49                if [ ! -d w_${i}nm ]; then
  50.     50                    mkdir w_${i}nm
  51.     51                fi
  52.     52                for j in ${PRESSURE_DIRECTORY[@]}
  53.     53                do
  54.     54                    if [ ! -d w_${i}nm/p_${j}kpa ]; then
  55.     55                        mkdir w_${i}nm/p_${j}kpa
  56.     56                    fi
  57.     57                done
  58.     58            done
  59.     59            echo "Done."
  60.     60       
  61.     61       
  62.     62        ### compile source code
  63.     63            echo -ne "Compiling source code ........................\t"
  64.     64            cd ~
  65.     65            $FC $FFALGS *.f
  66.     66            echo "Done."
  67.     67       
  68.     68       
  69.     69        ### copy initial files to the corresponding directories
  70.     70            echo -ne "Copying initial files to the corresponding directories ........................\t"
  71.     71            for i in ${PORE_WIDTH_DIRECTORY[@]}
  72.     72            do
  73.     73                for j in ${PRESSURE_DIRECTORY[@]}
  74.     74                do
  75.     75                    cd ~
  76.     76                    cp a.out result.dat $WORK_DIRECTORY/w_${i}nm/p_${j}kpa
  77.     77                done
  78.     78            done
  79.     79            echo "Done."
  80.     80       
  81.     81       
  82.     82        ### submit computing tasks
  83.     83        ### the tasks are divided into the number of PORE_WIDTH sets.
  84.     84        ### each task has the number of PRESSURE points.
  85.     85            echo -ne "Submitting computing tasks ........................\t"
  86.     86            cd $TASKS_DIRECTORY
  87.     87            for i in ${PORE_WIDTH_DIRECTORY[@]}
  88.     88            do
  89.     89                find $WORK_DIRECTORY/w_${i}nm -name a.out -print > w_${i}nm.job.$$
  90.     90                sed -e 's/^/cd /g' -e 's/a\.out/\nnohup .\/a\.out \&/g' w_${i}nm.job.$$ > w_${i}nm.job
  91.     91                rm -rf w_${i}nm.job.$$
  92.     92        #        $BSUB < w_${i}nm.job
  93.     93        #        sleep 3
  94.     94            done
  95.     95            echo "Done."
  96.     96       
  97.     97       
  98.     98        ### collect adsorption amount, isosteric heat, et al. as column data
  99.     99            echo -ne "Processing final data ........................\t"
  100.    100            cd $RESULTS_DIRECTORY
  101.    101            x=0
  102.    102            for i in ${RESULT_FILES[@]}
  103.    103            do
  104.    104                if [ -f ${i}.txt ]; then
  105.    105                    mv ${i}.txt _${i}.old
  106.    106                fi
  107.    107                touch ${i}.txt
  108.    108                printf "%-20s" " " >> ${i}.txt
  109.    109                for j in ${PORE_WIDTH_DIRECTORY[@]}
  110.    110                do
  111.    111                    printf "%-20s" "w,${j}nm" >> ${i}.txt
  112.    112                done
  113.    113                printf "\n" >> ${i}.txt
  114.    114                printf "%-20s" "p,kpa" >> ${i}.txt
  115.    115                x=`expr $x + 1`
  116.    116                for j in ${PORE_WIDTH_DIRECTORY[@]}
  117.    117                do
  118.    118                    for k in ${PRESSURE_DIRECTORY[@]}
  119.    119                    do
  120.    120                        while [ $x -lt 6 ]
  121.    121                        do
  122.    122                            printf "%-20s" "${i}" >> ${i}.txt
  123.    123                        done
  124.    124                        while [ $x -ge 6 -a $x -lt 14 ]
  125.    125                        do
  126.    126                            a=`cat $WORK_DIRECTORY/w_${j}nm/p_${k}kpa/result.dat | grep "${i}" | awk '{print $3}'`
  127.    127                            printf "%-20s" "${i}," "$a" >> ${i}.txt
  128.    128                        done
  129.    129                        while [ $x -eq 14 ]
  130.    130                        do
  131.    131                            printf  "%-20s" "${i}" >> ${i}.txt
  132.    132                        done
  133.    133                    done
  134.    134                done
  135.    135                printf "\n" >> ${i}.txt
  136.    136                for j in ${PORE_WIDTH_DIRECTORY[@]}
  137.    137                do
  138.    138                    for k in ${PRESSURE_DIRECTORY[@]}
  139.    139                    do
  140.    140                        printf "%-20s\n" "${k}" >> ${i}.txt
  141.    141                    done
  142.    142                    for k in ${PRESSURE_DIRECTORY[@]}
  143.    143                    do
  144.    144                        a=`cat $WORK_DIRECTORY/w_${j}nm/p_${k}kpa/result.dat | grep "${i}" | awk '{print $2}'`
  145.    145                        printf "%-20s" "$a" >> ${i}.txt
  146.    146                    done
  147.    147                done
  148.    148                printf "\n" >> ${i}.txt
  149.    149            done
  150.    150            echo "Done."
  151.    151       
  152.    152       
  153.    153        ### clean temporary files
  154.    154            echo -ne "Cleaning temporary files ........................\t"
  155.    155            find $WORK_DIRECTORY -name a.out -print | xargs rm -f
  156.    156            echo "Done."

复制代码


现在就    98        ### collect adsorption amount, isosteric heat, et al. as column data
这部分代码有问题,执行完后,一直不出现那个“Done”,然后在/export/home/pengx/testsh/results目录下,只有一个rho.txt文件,文件大小不断增大,也就是说一直在写入数据到rho.txt文件中,该文件内容如下:


  1.                     w,0.3549nm          w,0.7098nm         
  2. p,kpa               rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 rho                 
复制代码



请问该如何调试?
回复 支持 反对

使用道具 举报

发表于 2007-1-22 11:29:00 | 显示全部楼层
在while循环中没有更新x的值,死循环。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-22 11:31:32 | 显示全部楼层
Post by Iambitious
在while循环中没有更新x的值,死循环。



该如何修改呢?

我现在都不愿意动脑了,边学边写,实在太累了
回复 支持 反对

使用道具 举报

发表于 2007-1-22 11:36:35 | 显示全部楼层
while [ $x -lt 6 ]
   121                        do
   122                            printf "%-20s" "${i}" >> ${i}.txt
   123                        done
比如对于这个while循环,不断地测试x是否小于6,由于在循环体中没有更新x的值,所以x 一直小于6,所以死循环,至于具体怎么改,你应该问你自己想要这个循环干什么。还有边学边写虽然累,但是也学到的最扎实,我很羡慕你有这样的环境,像我所做的项目与bash基本不相关,所以我只能在论坛上看别人提出的问题,然后自己试一试,这样很难提高。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表