关于awk -F的问题

执行ls>>bbawk'{if($5=="0")peint($0"这个文件为空")}'bb|teecc可以显示cc当awk-F'|''{if($5=="0")peint(... 执行ls >> bb
awk '{ if( $5=="0") peint ($0 " 这个文件为空" ) } ' bb |tee cc
可以显示cc
当awk -F '|' '{ if( $5=="0") peint ($0 " 这个文件为空" ) } ' bb |tee cc
时输出没有结果
这是为什么呢
展开
 我来答
ace_fei
推荐于2017-11-24 · TA获得超过2013个赞
知道小有建树答主
回答量:734
采纳率:100%
帮助的人:726万
展开全部
-F表示FS 字段的分隔符,默认为空格。
如果你要改输出的字段分隔符用OFS (输出的字段分隔符,默认为空格),如
echo a b c d | awk '{OFS="|";print $1,$2,$3,$4}'
但是它对$0输出的结果是无效的。

所以两个方法:
1. awk '{OFS="|"; if( $5=="0") print $1,$2,$3,$4,$5,$6,$7,$8,$9,"这个文件为空"}' bb | tee cc
2. 由于ls-l的结果中不光有空格,还有tab(\t),所以用以下语句可以实现你的要求。
awk '{if( $5=="0") print $0}' bb | perl -pe '{s/[ \t]+/\|/g}' | tee cc
追问
我看到有人说,添加$1=$1 
awk '{OFS="|"; $1=$1 if( $5=="0") print &0,"这个文件为空"}'
这样awk会认为$0有了变动并对$0重新赋值。请问这样可以么?
上面我验证了 ,可以

还有一个问题上面的输出由于文件名长短不一,会导致最后的输出对不齐。能不能像c语言一样指定print的输出格式呢?
小米飞猫
2011-12-13 · 专注于IT监控领域技术
小米飞猫
采纳数:1653 获赞数:4811

向TA提问 私信TA
展开全部
你应该ls -l > bb 才对吧?
awk '{if($5=="0")print($0 " 这个文件为空")}' bb | tee cc #然后判断容量是否为空

-F'|' 是以| 为分割符 ls -l 显示里并没有| 这个符号吧?
追问
对,是ls l >bb
我是想替换原来的域分割符为‘|’,应该怎样做呢
我使用awk ' BEGIN{OFS="|"} {if($5=="0")print($0 " 这个文件为空")}' bb | tee cc
直接报错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luneng8183
2011-12-13 · TA获得超过902个赞
知道小有建树答主
回答量:606
采纳率:100%
帮助的人:514万
展开全部
awk '{gsub(FS, "|")
print
}' bb | tee cc

这样会把bb里的域分割符替换成|

不太懂你到底要干什么。
追问
正在学习中,做些无聊的实验,呵呵。可以通过修改OFS么?
追答
可以,那样的话,你要print $1,$2,$3这样才可以达到效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式