金鳞

目标->软件测试架构师

Question1

shell_老汤(13129252) 09:22:25
请教awk: 取出第1到第4行的第6个字段,且行长度大于10的 awk语句怎么写?

shell_一阵风(305063721) 09:39:02
 awk 'NR==1,NR==4{if(length($0)>10)print $6}' file  试试
posted on 2009-12-02 09:43 金鳞 阅读(375) 评论(3)  编辑 收藏 引用 所属分类: AWK

评论

# re: AWK(更新) 2009-12-23 15:41 chenxin9821
SHELL版的题:
[root@tch254 ~]# cat aa.txt
aaa/bbb/ccc
ddd/eee/fff
ggg/hhh/iii
aaa/bbb/ccc/aaa/bbb/ccc/ddd/eee
[root@tch254 ~]# 变成这样输出:
ccc aaa/bbb
fff ddd/eee
iii ggg/hhh
eee aaa/bbb/ccc/aaa/bbb/ccc/ddd
[root@tch254 ~]#


************************
shell
[root@tch254 ~]# while read var;do echo "${var##*/} ${var%/*}";done < aa.txt
ccc aaa/bbb
fff ddd/eee
iii ggg/hhh
eee aaa/bbb/ccc/aaa/bbb/ccc/ddd
[root@tch254 ~]#

************************************
sed
[root@tch254 ~]# sed -nr 's/(.*)(\/)(.*)/\3 \1/p' aa.txt
ccc aaa/bbb
fff ddd/eee
iii ggg/hhh
eee aaa/bbb/ccc/aaa/bbb/ccc/ddd
[root@tch254 ~]#
***********************************
$是变量
#是左边的字串 %是右边的字串
%%右贪婪匹配
##左贪婪匹配
*_galf 15:38:05
${var%%/*} 从右匹配/* 贪婪情况下 /a/b/c/d 全部匹配
*_galf 15:38:23
${var%/*} 非贪婪 /a/b/c/d 只匹配 /d
*_galf 15:38:35
#为从左侧开始
*_galf 15:38:40
能明白么?

pl-hellodolly 15:39:29

為了完整起見,我這裡再用一些例子加以說明 ${ } 的一些特異功能:
假設我們定義了一個變量為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一條 / 及其左邊的字串:my.file.txt
${file#*.}:拿掉第一個 . 及其左邊的字串:file.txt
${file##*.}:拿掉最後一個 . 及其左邊的字串:txt
${file%/*}:拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3
${file%%/*}:拿掉第一條 / 及其右邊的字串:(空值)
${file%.*}:拿掉最後一個 . 及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一個 . 及其右邊的字串:/dir1/dir2/dir3/my
記憶的方法為:

# 是去掉左邊(在鑑盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個符號是最大匹配。


${file:0:5}:提取最左邊的 5 個字節:/dir1
${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2

  回复  更多评论
  

# re: AWK(更新) 2009-12-23 15:43 chenxin9821
[root@tch254 ~]# awk -F/ 'BEGIN{OFS="/"}{v=$NF;$NF="";print v" "$0}' aa.txt
ccc aaa/bbb/
fff ddd/eee/
iii ggg/hhh/
eee aaa/bbb/ccc/aaa/bbb/ccc/ddd/
[root@tch254 ~]#

@chenxin9821
  回复  更多评论
  

# re: AWK(更新) 2013-01-31 22:34 egi
@chenxin9821
# awk -F/ 'BEGIN{OFS="/"}{v=$NF;NF-=1;print v" "$0}' a
ccc aaa/bbb
fff ddd/eee
iii ggg/hhh
eee aaa/bbb/ccc/aaa/bbb/ccc/ddd
  回复  更多评论
  

只有注册用户登录后才能发表评论。