亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 關(guān)于文本處理問題,菜鳥求助各位大神,謝謝! [打印本頁]

作者: tengfei0311    時(shí)間: 2015-09-12 11:19
標(biāo)題: 關(guān)于文本處理問題,菜鳥求助各位大神,謝謝!
本帖最后由 tengfei0311 于 2015-09-12 14:35 編輯

從第13行開始,對(duì)第1列的2.0000進(jìn)行相加,一直加到倒數(shù)第二行止,如果值等于150,就不管這個(gè)文件;如果值不等于150,就把最后一行2.0000改成5.0000,后面的值不變,把改后的5.0000這一行所有值復(fù)制在文件后面,復(fù)制到和為150止。

說明:我的所有文件第一列值相加都不會(huì)超過150,一般在100以內(nèi)。

測試數(shù)據(jù)見附件:
11.zip (381 Bytes, 下載次數(shù): 9)


##########################################################
#############文件名:test.mod##################################
MODEL.01                                                               
Crust1.0                                                               
ISOTROPIC                                                               
KGS                                                                     
SPHERICAL EARTH                                                         
1-D                                                                     
CONSTANT VELOCITY                                                      
LINE08                                                                  
LINE09                                                                  
LINE10                                                                  
LINE11                                                                  
H(KM)   VP(KM/S) VS(KM/S) RHO(GM/CC)   QP   QS  ETAP  ETAS  FREFP  FREFS
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00     ###(第13行)###
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 6.300 3.650 2.780 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00   #####累加到這一行止######
2.0000  8.120 4.510 849.  600.  0.00  0.00  1.00  1.00         ————》第一列值累加達(dá)不到150,就要把這行改成:5.0000  8.120 4.510 849.  600.  0.00  0.00  1.00  1.00 之后復(fù)制到第一列和為150止

#######################################################


以上面這個(gè)文件為實(shí)例:

對(duì)第1列值,從13行起累加到倒數(shù)第二行,一共43行,那么值加起來86,不夠和為150;差150-86=64 那么就要把最后一行:
2.0000  8.120 4.510 849.  600.  0.00  0.00  1.00  1.00
改成:
5.0000  8.120 4.510 849.  600.  0.00  0.00  1.00  1.00   (第一列2.0000改成5.0000就行)

差64 就把改后的最后一行:5.0000  8.120 4.510 849.  600.  0.00  0.00  1.00  1.00(復(fù)制13行)  一共要復(fù)制13行放后面 結(jié)束。!


我這里有300多個(gè)這樣的文件,每個(gè)文件行數(shù)都不一樣。


謝謝!。。。。。。。!





作者: MMMIX    時(shí)間: 2015-09-12 14:21
tengfei0311 發(fā)表于 2015-09-12 11:19
第一列值累加達(dá)不到150,就要把這行改成:5.0000  8.120 4.510 849.  600.  0.00  0.00  1.00  1.00 之后復(fù)制到第一列和為150止


如果超過了 150 呢?
作者: tengfei0311    時(shí)間: 2015-09-12 14:32
回復(fù) 2# MMMIX

不會(huì)超過150  每個(gè)文件第一列的值加起來不會(huì)超過100的

   
作者: MMMIX    時(shí)間: 2015-09-12 14:55
回復(fù) 3# tengfei0311


    那超過150就不做處理了:

#!/usr/bin/awk -f

{
    if (NR < 13) {
        print
    } else {
        total += p1
        p1 = $1

        if (length(pline) != 0)
            print pline
        pline = $0
    }
}

END {
    if (total >= 150) {
        print pline
    } else {
        sub(/[0-9.]+/, "5.0000", pline)
        n = int((150 - total) / 5)
        for (i = 0; i <= n; i++)
            print pline
    }
}

作者: tc1989tc    時(shí)間: 2015-09-12 15:33
本帖最后由 tc1989tc 于 2015-09-12 15:34 編輯
  1. #!/bin/sh

  2. appendFiles=$1

  3. # awk params
  4. modifyNum=5.0000
  5. sumNum=150
  6. startLine=13

  7. for i in $appendFiles;do
  8.     awk -vmodifyNum=$modifyNum -vsumNum=$sumNum -vstartLine=$startLine -vfile=$i \
  9.     '/^2.0000/{lastLine=$0} {if (NR >= startLine)sum +=$1}
  10.       END{sub(/^2.0000/,modifyNum,lastLine);sum -= 2.0;reNum=sumNum - sum;
  11.       if (reNum >0){item=(reNum + 4)/5;for (i=0;i<item;i++)print lastLine >> file} }' $i
  12. done
復(fù)制代碼
./append.sh files
作者: tengfei0311    時(shí)間: 2015-09-13 01:44
回復(fù) 5# tc1989tc

您好!謝謝您的幫助,但是運(yùn)行還是報(bào)錯(cuò)。我來慢慢研究下,剛接觸shell。。。

報(bào)錯(cuò)信息如下:

bash-3.2$ ls
21.0_98.0.mod        append.sh
bash-3.2$ ./append.sh 21.0_98.0.mod
bash: ./append.sh: Permission denied
bash-3.2$ sh append.sh 21.0_98.0.mod
awk: invalid -v option

   
作者: tengfei0311    時(shí)間: 2015-09-13 01:49
回復(fù) 4# MMMIX

謝謝您的幫助,我保存運(yùn)行,報(bào)錯(cuò)。

報(bào)錯(cuò)信息如下:
bash-3.2$ ls
21.0_98.0.mod        append.sh        test.sh
bash-3.2$ sh test.sh 21.0_98.0.mod
test.sh: line 3: syntax error near unexpected token `{'
test.sh: line 3: `if(NR < 13){'
bash-3.2$ sh test.sh
test.sh: line 3: syntax error near unexpected token `{'
test.sh: line 3: `if(NR < 13){'

   
作者: tengfei0311    時(shí)間: 2015-09-13 02:24
本帖最后由 tengfei0311 于 2015-09-13 02:26 編輯

回復(fù) 5# tc1989tc


您好!我已經(jīng)調(diào)通可以運(yùn)行了,太謝謝您了,但是還有一個(gè)問題。見圖紅框部分。

就是最后一行2.0000沒有改,你是直接把最后一行2.0000改成5.0000就復(fù)制在后面,最后一行你沒有任何操作,我是想最后一行也要操作 把2.0000也改成5.0000,在復(fù)制改后的5.000行,直到第一列值求和到150停止。

現(xiàn)在的問題就是多了這一行數(shù)據(jù),我計(jì)算了一下,把最后哪行要改的數(shù)據(jù)(圖片紅框行)刪掉就對(duì)了 或者把最后一行(圖片紅框這一行)2.0000改成5.0000 那么整個(gè)文件數(shù)據(jù)也就多一行5.0000的數(shù)據(jù)。

作者: MMMIX    時(shí)間: 2015-09-13 08:49
回復(fù) 7# tengfei0311


    我那是個(gè) AWK 腳本,不是 shell 腳本。
作者: jason680    時(shí)間: 2015-09-13 10:08
回復(fù) 1# tengfei0311

$ awk -vst=13 -vmax=150 -vmul=5 '{
  if(S0!="")
    print S0;
  if(NR>=st)
    total+=S1;
  S0=$0;
  S1=$1;
}
END{
  diff=max-total;
  if(diff<0){
    print S0;
    exit;
  }
  sub(/[^ ]+/,"5.000",S0);
  for(n=0;n<=diff;n+=mul)
    print S0;
}' test.mod

   
作者: tengfei0311    時(shí)間: 2015-09-13 10:21
回復(fù) 9# MMMIX

我需要一個(gè)shell腳本,我這里文件太多,我沒有搞過AWK 不知道怎么使用


   
作者: MMMIX    時(shí)間: 2015-09-13 10:22
回復(fù) 11# tengfei0311


    不會(huì)用就算了。
作者: jason680    時(shí)間: 2015-09-13 10:42
http://72891.cn/thread-4187658-1-1.html
作者: tengfei0311    時(shí)間: 2015-09-13 10:48
回復(fù) 13# jason680

我現(xiàn)在要處理的文本比這個(gè)復(fù)雜一些吧 不懂的太多 慢慢跟你們學(xué)習(xí)


   
作者: tc1989tc    時(shí)間: 2015-09-13 12:46
回復(fù) 8# tengfei0311


    那你可以全部保存在一個(gè)臨時(shí)文件吧然后在mv一下吧
作者: tengfei0311    時(shí)間: 2015-09-13 13:17
回復(fù) 15# tc1989tc



謝謝,多一行數(shù)據(jù),MV不行吧?

要把這行刪掉就好了 或者把這行(紅框這行)2.0000換成5.0000后面少復(fù)制一行就可以了。


作者: tengfei0311    時(shí)間: 2015-09-14 12:38
回復(fù) 10# jason680


您好!運(yùn)行有錯(cuò)誤
awk: test:1: $awk -vst=13 -vmax=150 -vmul=5 '{
awk: test:1:          ^ syntax error
awk: test:1: $awk -vst=13 -vmax=150 -vmul=5 '{
awk: test:1:                   ^ syntax error
awk: test:1: $awk -vst=13 -vmax=150 -vmul=5 '{
awk: test:1:                             ^ syntax error
awk: test:1: $awk -vst=13 -vmax=150 -vmul=5 '{
awk: test:1:                                ^ invalid char ''' in expression



   

作者: jason680    時(shí)間: 2015-09-14 13:00
本帖最后由 jason680 于 2015-09-14 13:01 編輯

回復(fù) 17# tengfei0311

It's a shell command without '$'

$ head -1 test
$awk -vst=13 -vmax=150 -vmul=5 '{

$ awk -f test
awk: test:1: $awk -vst=13 -vmax=150 -vmul=5 '{
awk: test:1:          ^ syntax error
...


$ cat test
awk -vst=13 -vmax=150 -vmul=5 '{
  if(S0!="")
    print S0;
  if(NR>=st)
    total+=S1;
  S0=$0;
  S1=$1;
}
END{
  diff=max-total;
  if(diff<0){
    print S0;
    exit;
  }
  sub(/[^ ]+/,"5.000",S0);
  for(n=0;n<=diff;n+=mul)
    print S0;
}' test.mod

$ bash test
MODEL.01                                                               
...
H(KM)   VP(KM/S) VS(KM/S) RHO(GM/CC)   QP   QS  ETAP  ETAS  FREFP  FREFS
2.0000 6.100 3.550 2.740 849.  600.  0.00  0.00  1.00  1.00
...
2.0000 7.000 3.990 2.950 849.  600.  0.00  0.00  1.00  1.00
5.000  8.120 4.510 849.  600.  0.00  0.00  1.00  1.00
...
5.000  8.120 4.510 849.  600.  0.00  0.00  1.00  1.00




作者: tengfei0311    時(shí)間: 2015-09-14 14:00
回復(fù) 18# jason680


終于搞好了,太感謝您好了!完美解決。

之前寫的code都多兩行,所以我想用sed刪掉,現(xiàn)在就不用了,一步搞定。謝謝!
   





歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2