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

Chinaunix

標(biāo)題: awk或sed如何讀取帶有字符的行文件 [打印本頁]

作者: explorerlj    時間: 2014-09-02 16:14
標(biāo)題: awk或sed如何讀取帶有字符的行文件
各位shell高手,向大家請教個問題,望解答,謝謝。。
   具體如下:一個文本文件,里面有很多數(shù)據(jù),每段的數(shù)據(jù)以字符“X"分隔,想從該文件中提取每段數(shù)據(jù),并將每段數(shù)據(jù)按100行間隔提取,存在一個文件里,不用字符"X“分隔。


一個文本文件格式為:
                    X
                    112323.2222   34.222223       1001
                     1124344444   222222222      3000
                     222222222     33333333        6666
                    .......                ..........
                    .......               ...........
                   X
                    222222222      2222222      999
                    33333333        4444444     2000
                     555555          555555       4000
                   ...........           .........
                   .........            ..........
                   X
                    4444444         5555555      2000
                     232323          45454545    3000
                    6767676          3232323     6000
                    ........             ..........        ......

作者: super皮波    時間: 2014-09-02 16:21
沒太看明白你說的,你最好有個列子,想達(dá)到什么樣的效果
作者: explorerlj    時間: 2014-09-02 16:48
程序的思路是這樣,按每行讀取數(shù)據(jù),當(dāng)遇到字符”X"時,讀取下一行數(shù)據(jù)回車,然后再間隔100行讀取一行數(shù)據(jù)回車。。。。。,當(dāng)再次遇到字符“X"時,與之前一樣,讀取下一行數(shù)據(jù)回車,然后再間隔100行讀取一行數(shù)據(jù)回車。
      
作者: dn833    時間: 2014-09-02 16:51
  1. [root@FILE_SHARE tmp]# cat b
  2. X
  3. 1 112323.2222   34.222223       1001
  4. 2 1124344444   222222222      3000
  5. 3 222222222     33333333        6666
  6. 4 112323.2222   34.222223       1001
  7. 5 1124344444   222222222      3000
  8. 6 222222222     33333333        6666
  9. 7 112323.2222   34.222223       1001
  10. 8 1124344444   222222222      3000
  11. 9 222222222     33333333        6666
  12. 10 112323.2222   34.222223       1001
  13. X
  14. 1 1124344444   222222222      3000
  15. 2 222222222     33333333        6666
  16. 3 112323.2222   34.222223       1001
  17. 4 1124344444   222222222      3000
  18. 5 222222222     33333333        6666
  19. 6 12323.2222   34.222223       1001
  20. 7 1124344444   222222222      3000
  21. 8 222222222     33333333        6666
  22. 9 112323.2222   34.222223       1001
  23. 10 1124344444   222222222      3000
  24. X
  25. 1 222222222     33333333        6666
  26. 2 112323.2222   34.222223       1001
  27. 3 1124344444   222222222      3000
  28. 4 222222222     33333333        6666
  29. 5 112323.2222   34.222223       1001
  30. 6 1124344444   222222222      3000
  31. 7 222222222     33333333        6666
  32. 8 112323.2222   34.222223       1001
  33. 9 1124344444   222222222      3000
  34. 10 222222222     33333333        6666
  35. [root@FILE_SHARE tmp]# awk 'BEGIN{RS="X";FS="\n"}NR>1{$1=$1;for(i=2;i<=NF;i=i+3)print $i}' b
  36. 1 112323.2222   34.222223       1001
  37. 4 112323.2222   34.222223       1001
  38. 7 112323.2222   34.222223       1001
  39. 10 112323.2222   34.222223       1001
  40. 1 1124344444   222222222      3000
  41. 4 1124344444   222222222      3000
  42. 7 1124344444   222222222      3000
  43. 10 1124344444   222222222      3000
  44. 1 222222222     33333333        6666
  45. 4 222222222     33333333        6666
  46. 7 222222222     33333333        6666
  47. 10 222222222     33333333        6666
復(fù)制代碼
如果符合lz的想法把i=i+3改成i=i+100就ok了
作者: explorerlj    時間: 2014-09-02 17:01
非常感謝!太牛了 回復(fù) 4# dn833


   
作者: super皮波    時間: 2014-09-02 17:04
awk 'BEGIN{i=0;}{if($0 == "X") {line = NR + 1 ; next} if(NR == line ) {a[i] = $0; line+=100;i+=1;next}} END{for (i in a) print a[i]}' test

你試試這個 挺笨的方法
作者: explorerlj    時間: 2014-09-02 17:09
如果保留每段數(shù)據(jù)的首行和尾行,中間間隔100行,好不好弄,謝謝!
一個文本文件格式為:
                    X
                    112323.2222   34.222223       1001      (提取該段數(shù)據(jù)首行)
                     1124344444   222222222      3000
                     222222222     33333333        6666      (中間間隔100行)
                    .......                ..........
                    .......               ...........
                   5555555     888888888             8888     (提取該數(shù)據(jù)最后一行)
                   X
                    222222222      2222222      999           (提取該段數(shù)據(jù)首行)
                    33333333        4444444     2000          (中間間隔100行)
                     555555          555555       4000
                   ...........           .........
                   .........            ..........
                   888888           3433333      7777          (提取該數(shù)據(jù)最后一行)
作者: super皮波    時間: 2014-09-02 17:11
回復(fù) 7# explorerlj

你看看6樓我說的 是不是滿足你的需求
作者: explorerlj    時間: 2014-09-02 17:19
結(jié)果與dn833不一樣,好像循環(huán)有問題,不過還是要感謝你,謝謝!剛開始學(xué),很多不太懂。回復(fù) 6# super皮波


   
作者: super皮波    時間: 2014-09-02 17:21
回復(fù) 9# explorerlj

我這有一點(diǎn)限制,要求X前不能有空格,我自己測試是沒問題的
   




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