关于awk的疑问

sh/bash/dash/ksh/zsh等Shell脚本
回复
frostfall
帖子: 8
注册时间: 2016-10-31 15:31
系统: 16.10

关于awk的疑问

#1

帖子 frostfall » 2017-02-14 9:52

目录下有几个文件,我想用awk输出第二个到第四个的名字
echo `ls` | awk '{print $2,$4}'
只输出第二个和第四个
echo `ls` | awk '{print $2-$4}'
输出0,什么意思?(第一个问题)
怎么解决呢?正确写法是什么?(第二个问题)
然后想到了循环来输出
echo `ls`| awk 'BEGIN{for(count=2;count<6;count++)print $count}'
输出4个空行
换种写法
echo `ls` | awk 'BEGIN{count=2;while(count<6){print $count;count ++;}}'
还是4个空行
怎么会这样?(第三个问题)
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 关于awk的疑问

#2

帖子 susbarbatus » 2017-02-14 10:09

问题一:没有这种语法,- 被理解成减号了,非数字的字符串被强制转化为0相减,得0。
问题二:循环,或者改用 cut 好了,cut 支持这样的语法

代码: 全选

$ echo `ls` | cut -d ' ' -f 2-4
问题三:去掉BEGIN,BEGIN是在 awk 读输入数据前执行的,读不到数据就是空行了。
沉迷将棋中……
frostfall
帖子: 8
注册时间: 2016-10-31 15:31
系统: 16.10

Re: 关于awk的疑问

#3

帖子 frostfall » 2017-02-14 10:13

susbarbatus 写了:问题一:没有这种语法,- 被理解成减号了,非数字的字符串被强制转化为0相减,得0。
问题二:循环,或者改用 cut 好了,cut 支持这样的语法

代码: 全选

$ echo `ls` | cut -d ' ' -f 2-4
问题三:去掉BEGIN,BEGIN是在 awk 读输入数据前执行的,读不到数据就是空行了。
嗯,明白了,问题解决,多谢
回复