免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2460 | 回复: 4

[其他] AWK 命令输出函数结果 [复制链接]

论坛徽章:
2
辰龙
日期:2015-01-11 00:34:002015年亚洲杯之巴勒斯坦
日期:2015-01-28 10:35:37
发表于 2018-01-18 15:10 |显示全部楼层
本帖最后由 securitypluscn 于 2018-01-18 15:10 编辑

下边是我写的一个小程序, 我想用AWK显示最后输出结果,在网上搜了半天,不得要领,最后只好用column 命令。请问如何用AWK 输出函数结果。


#! /bin/bash
                        
#This program improves ls command by
#showing numbers of entries in a directory
#showing file size in KB/MB/GB
#showing output in column(s)


#list content in current directory with no argument
#List corresponding contents in the order of multiple arguments

#If the content is directory, shows the numbers of entry,
#otherwise, list the size of file

# Output entry(s) for dirctory and size for file(s)
entry_size(){
  for file in *; do
    if [[ -d $file ]]; then
       [[ ! -r "$file" ]] && echo "$file can't be opened" && continue
       entry=$(ls $file | wc -l)
       if [[ $entry -gt 1 ]]; then
          echo "${file}($entry entries)"
       else
          echo "${file}($entry entry)"
       fi  
    else
       file_size=$(ls -l -d -h  $file | awk '{print $5}')
       if [[ $file_size =~ ^[0-9]+$ ]]; then   
         echo "${file}( ${file_size}B )"
       else
         echo "${file}( $file_size )"
       fi
    fi
  done
}

# main codes

if [[ $# -eq 0 ]]; then
  echo
  entry_size | column  
  echo
else
  echo
  for arg in $@;do
    [[ ! -e "$arg" ]] && echo "$arg not exits" && continue
    [[ ! -r "$arg" ]] && echo "$arg can't be opened" && continue
    echo
    echo "Content of \"$arg\""
    echo "---------------------------------------------------------------------------------------------------------------------"
    cd $arg
    entry_size | column
  done
  echo
fi  


论坛徽章:
5
CU十四周年纪念徽章
日期:2017-08-28 17:16:1915-16赛季CBA联赛之北控
日期:2018-03-29 11:39:0615-16赛季CBA联赛之上海
日期:2018-05-21 10:46:10技术图书徽章
日期:2018-09-03 13:54:18技术图书徽章
日期:2018-09-03 13:54:28
发表于 2018-01-19 10:56 |显示全部楼层
  1. awk '{print $0}' <<< $(entry_size)
复制代码

论坛徽章:
21
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59
发表于 2018-01-19 12:39 |显示全部楼层
本帖最后由 wh7211 于 2018-01-19 12:50 编辑

回复 1# securitypluscn


如果函数entry_size执行结果如下,用awk把结果输出为1行:
aa(1 entry)
bb(2 entries)
cc(10B)
dd(20K)

  1. entry_size|awk '{s=s?s" "$0:$0}END{print s}'
复制代码

输出:
aa(1 entry) bb(2 entries) cc(10B) dd(20K)

论坛徽章:
0
发表于 2018-01-19 16:06 |显示全部楼层
以楼主的需求为例,让我来谈谈,什么是powershell的简单强大 :
  1. dir -Directory 你的目录|select-object {xxx}|format-table {yyy}
复制代码


1 dir -Directory 你的目录。按照你的愿意,输出所有目录
2 select-object {xxx}。给每一个目录,构造一个新属性,名字为‘目录内文件总数’。值为:(dir 目录 -file).count  。并筛选其他属性。输出。
3 表格输出管道来的内容。对某个属性,应用自定义方法。这个自定义方法,就是你编写的函数。而且powershell直接有1kb ,2mb,3gb这种语法糖。

本人格言:
win,linux通用的,脚本【速成大师】的路上,并不拥挤。知道powershell简单强大,并能坚持学的人,并不多。

论坛徽章:
2
辰龙
日期:2015-01-11 00:34:002015年亚洲杯之巴勒斯坦
日期:2015-01-28 10:35:37
发表于 2018-01-22 02:38 |显示全部楼层
多谢各位的帮助。
  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP