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

Chinaunix

標(biāo)題: 請教awk過濾行中空格或\t [打印本頁]

作者: ccjsj1    時間: 2016-03-08 22:33
標(biāo)題: 請教awk過濾行中空格或\t
本帖最后由 ccjsj1 于 2016-03-08 22:35 編輯

如下:將每3行按一行輸出,做下對齊,但第6行和第9行是以空格或\t開頭,用gsub過濾不掉--!
  1. neo@asterisk:/tmp$ cat 3.log
  2. STATUS
  3. ------------
  4. OPEN
  5. SESSION_ACTIVE
  6. --------------
  7.         30
  8. SESSION_CURCOUNT
  9. ----------------
  10.         463
  11. PROCESSES_ALLCOUNT
  12. ------------------
  13. 10000

  14. neo@asterisk:/tmp$ cat -A 3.log
  15. STATUS$
  16. ------------$
  17. OPEN$
  18. SESSION_ACTIVE$
  19. --------------$
  20. ^I30$
  21. SESSION_CURCOUNT$
  22. ----------------$
  23. ^I463$
  24. PROCESSES_ALLCOUNT$
  25. ------------------$
  26. 10000$

  27. neo@asterisk:/tmp$ cat 3.log | awk '{if($0~"STATUS") a=1; if(a!=3) {gsub(/\t/,""); printf("%-20s",$0); a++ } else {print $0; a=1}}'
  28. STATUS              ------------        OPEN
  29. SESSION_ACTIVE      --------------              30
  30. SESSION_CURCOUNT    ----------------            463
  31. PROCESSES_ALLCOUNT  ------------------  10000

  32. neo@asterisk:/tmp$ cat 3.log | awk '{if($0~"STATUS") a=1; if(a!=3) {gsub(/^ */,""); printf("%-20s",$0); a++ } else {print $0; a=1}}'
  33. STATUS              ------------        OPEN
  34. SESSION_ACTIVE      --------------              30
  35. SESSION_CURCOUNT    ----------------            463
  36. PROCESSES_ALLCOUNT  ------------------  10000

  37. neo@asterisk:/tmp$ cat 3.log | awk '{if($0~"STATUS") a=1; if(a!=3) {gsub(/^ */,""); printf("%-20s",$0); a++ } else {print $0; a=1}}' | cat -A
  38. STATUS              ------------        OPEN$
  39. SESSION_ACTIVE      --------------      ^I30$
  40. SESSION_CURCOUNT    ----------------    ^I463$
  41. PROCESSES_ALLCOUNT  ------------------  10000$
復(fù)制代碼

作者: Herowinter    時間: 2016-03-08 23:18
回復(fù) 1# ccjsj1

  1. cat 3.log|xargs -n 3|column -t
  2. STATUS              ------------        OPEN
  3. SESSION_ACTIVE      --------------      30
  4. SESSION_CURCOUNT    ----------------    463
  5. PROCESSES_ALLCOUNT  ------------------  10000
復(fù)制代碼

作者: ccjsj1    時間: 2016-03-09 08:54
回復(fù) 2# Herowinter

感謝這末快的回復(fù)!結(jié)果也是期望的 !還是想用awk來實現(xiàn),不知有什末辦法沒有?謝謝!

   
作者: jcdiy0601    時間: 2016-03-09 09:35
  1. sed -e 's/^\s*//;N;N;s/\n/ /g' file |column -t
  2. STATUS              ------------        OPEN
  3. SESSION_ACTIVE      --------------      30
  4. SESSION_CURCOUNT    ----------------    463
  5. PROCESSES_ALLCOUNT  ------------------  10000
復(fù)制代碼

作者: zxy877298415    時間: 2016-03-09 09:43
  1. awk '{if(NR%3==0) {print gensub(" ","","G",$0)} else {printf("%-20s",$0)}}' file
復(fù)制代碼
回復(fù) 1# ccjsj1


   
作者: ccjsj1    時間: 2016-03-09 10:45
本帖最后由 ccjsj1 于 2016-03-09 10:45 編輯

回復(fù) 4# jcdiy0601
謝謝回復(fù)!結(jié)果是想要的 !sed一直沒學(xué)明白 想用awk實現(xiàn)
作者: Herowinter    時間: 2016-03-09 10:45
回復(fù) 3# ccjsj1

首先回答你的疑問, 空格 \t不是沒有成功替換, 而是你沒有讓awk對$0重新進(jìn)行賦值($1=$1).
比較下這兩段代碼的輸出就知道了.

  1. awk '{gsub(/^\s*/,"");print}' test
  2. STATUS
  3. ------------
  4. OPEN
  5. SESSION_ACTIVE
  6. --------------
  7. 30
  8. SESSION_CURCOUNT
  9. ----------------
  10.         463
  11. PROCESSES_ALLCOUNT
  12. ------------------
  13.         10000

  14. awk '{gsub(/^\s*/,"");$1=$1;print}' test
  15. STATUS
  16. ------------
  17. OPEN
  18. SESSION_ACTIVE
  19. --------------
  20. 30
  21. SESSION_CURCOUNT
  22. ----------------
  23. 463
  24. PROCESSES_ALLCOUNT
  25. ------------------
  26. 10000
復(fù)制代碼
用awk結(jié)合column -t也可以, 非要拿掉column -t自己去負(fù)責(zé)對齊吧.

  1. awk '{s=s"\t"$1} NR%3==0{print s;s=""}' test|column -t
  2. STATUS              ------------        OPEN
  3. SESSION_ACTIVE      --------------      30
  4. SESSION_CURCOUNT    ----------------    463
  5. PROCESSES_ALLCOUNT  ------------------  10000
復(fù)制代碼

作者: elu_ligao    時間: 2016-03-09 10:46
回復(fù) 1# ccjsj1
  1. 你那里有點問題, gsub放錯地方了
  2. awk '{if($0~"STATUS") a=1; if(a!=3) {printf("%-20s",$0); a++ } else {gsub(/\t/,"");print $0; a=1}}'
復(fù)制代碼

作者: ccjsj1    時間: 2016-03-09 11:33
回復(fù) 5# zxy877298415
試了下還是不行啊
  1. neo@asterisk:~/check_log/awk$ cat 3.log
  2. STATUS
  3. ------------
  4. OPEN
  5. SESSION_ACTIVE
  6. --------------
  7.         30
  8. SESSION_CURCOUNT
  9. ----------------
  10.         463
  11. PROCESSES_ALLCOUNT
  12. ------------------
  13. 10000
  14. neo@asterisk:~/check_log/awk$ awk '{if(NR%3==0) {print gensub(" ","","G",$0)} else {printf("%-20s",$0)}}' 3.log
  15. STATUS              ------------        OPEN
  16. SESSION_ACTIVE      --------------              30
  17. SESSION_CURCOUNT    ----------------            463
  18. PROCESSES_ALLCOUNT  ------------------  10000
  19. neo@asterisk:~/check_log/awk$ awk '{if(NR%3==0) {print gensub(" ","","G",$0)} else {printf("%-20s",$0)}}' 3.log | cat -A
  20. STATUS              ------------        OPEN$
  21. SESSION_ACTIVE      --------------      ^I30$
  22. SESSION_CURCOUNT    ----------------    ^I463$
  23. PROCESSES_ALLCOUNT  ------------------  10000$
  24. neo@asterisk:~/check_log/awk$
復(fù)制代碼

作者: ccjsj1    時間: 2016-03-09 11:36
本帖最后由 ccjsj1 于 2016-03-09 11:47 編輯

回復(fù) 7# Herowinter
你好,非常感謝!

不用重新賦值也是可以的(這是$0的內(nèi)容已經(jīng)修改了吧),如下:
  1. neo@asterisk:~/check_log/awk$ awk '{gsub(/^\s*/,"");print $0}' 3.log
  2. STATUS
  3. ------------
  4. OPEN
  5. SESSION_ACTIVE
  6. --------------
  7. 30
  8. SESSION_CURCOUNT
  9. ----------------
  10. 463
  11. PROCESSES_ALLCOUNT
  12. ------------------
  13. 10000
  14. neo@asterisk:~/ch
復(fù)制代碼

作者: ccjsj1    時間: 2016-03-09 11:51
回復(fù) 8# elu_ligao

多謝了,這個可以的!

將下面內(nèi)容放到第二個if前面也可以,每行都替換下;
gsub(/\t/,""

   
作者: elu_ligao    時間: 2016-03-09 11:58
回復(fù) 11# ccjsj1


    嗯, 當(dāng)然, 我看你的代碼, 意思好像是3的倍數(shù)的行就gsub,else 里面才是3倍數(shù)所在行執(zhí)行的操作
作者: blackold    時間: 2016-03-09 12:01
回復(fù) 7# Herowinter


    有沒有弄錯呢?
作者: blackold    時間: 2016-03-09 12:03
本帖最后由 blackold 于 2016-03-09 12:13 編輯

回復(fù) 9# ccjsj1


    不是不行,因為
  1. " "
復(fù)制代碼
空白地方,人家用的是<tab>,而你用的是<space>。 肯定不行了。

你用/\t/ 或 /\s/ 代替 " " 試試:
  1. awk '{if(NR%3==0) {print gensub(/\t/,"","G",$0)} else {printf("%-20s",$0)}}' urfile
復(fù)制代碼
  1. awk '{if(NR%3==0) {print gensub(/\s/,"","G",$0)} else {printf("%-20s",$0)}}' urfile
復(fù)制代碼
或者
  1. awk 'NR%3{printf("%-20s",$0);next}{gsub(/\t/,"");}1' urfile
復(fù)制代碼

作者: blackold    時間: 2016-03-09 12:08
回復(fù) 8# elu_ligao


    贊!
作者: ccjsj1    時間: 2016-03-09 12:37
回復(fù) 15# blackold
明白了,多謝黑哥!
這末多方法,越來越簡練!
作者: Herowinter    時間: 2016-03-09 13:17
回復(fù) 13# blackold

是我搞錯了, 沒有替換成功.

   
作者: jcdiy0601    時間: 2016-03-10 09:09
回復(fù) 6# ccjsj1


    我也是在學(xué)習(xí),你的思路也很好
作者: baby_神    時間: 2016-03-19 23:52
又學(xué)到一個新的函數(shù)用法,這個在書上好像沒見過,不錯

回復(fù) 5# zxy877298415


   
作者: ccjsj1    時間: 2016-03-21 12:43
回復(fù) 19# 時時20160307
不錯,又學(xué)了一招,謝謝!

   




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