免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 1660 | 回复: 14

[系统管理] awk格式文本 [复制链接]

论坛徽章:
0
发表于 2018-10-24 11:42 |显示全部楼层
大家好!我想把文本 "春种一粒粟秋收万颗子四海无闲田农夫犹饿死锄禾日当午汗滴禾下土谁知盘中餐粒粒皆辛苦"用awk格式化成下面的格式。请问大哥们怎么弄?

春种一粒粟,秋收万颗子。
四海无闲田,农夫犹饿死。
锄禾日当午,汗滴禾下土。
谁知盘中餐,粒粒皆辛苦

论坛徽章:
1
15-16赛季CBA联赛之同曦
日期:2017-03-19 09:57:50
发表于 2018-10-24 13:10 |显示全部楼层
echo "春种一粒粟秋收万颗子四海无闲田农夫犹饿死锄禾日当午汗滴禾下土谁知盘中餐粒粒皆辛苦" | awk '{str=$0;do{a=substr(str,1,5);str=substr(str,6);b=substr(str,1,5);str=substr(str,6);print a","b"。\n";} while(str)}'

论坛徽章:
19
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:33黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42
发表于 2018-10-24 13:24 |显示全部楼层
回复 1# router_id


  1. cat 1
  2. 春种一粒粟秋收万颗子四海无闲田农夫犹饿死锄禾日当午汗滴禾下土谁知盘中餐粒粒皆辛苦

  3. awk -F "" '{for(i=1;i<=NF;i++){printf("%s",i%10==0?$i"。\n":i%5==0?$i",":$i)}}' 1
  4. 春种一粒粟,秋收万颗子。
  5. 四海无闲田,农夫犹饿死。
  6. 锄禾日当午,汗滴禾下土。
  7. 谁知盘中餐,粒粒皆辛苦。
复制代码

论坛徽章:
0
发表于 2018-10-24 15:37 |显示全部楼层
回复 2# 农民伯伯丶
谢谢!
我用shell数组弄的一下,akw没有搞出来。谢谢大哥

论坛徽章:
0
发表于 2018-10-24 15:39 |显示全部楼层
回复 1# router_id

shell 代码:
#!/bin/bash
##############################################
#描述:用数组格式化古寺悯农二首
#版本:v1.0
##############################################

source_arra=(春种一粒粟秋收万颗子四海无闲田农夫犹饿死锄禾日当午汗滴禾下土谁知盘中餐粒粒皆辛苦)
new_arra=""
i=0
b=0
for((u=0;u<8;u++));do
        if [  $(expr $b % 2)  -eq 0 ];then
                new_arra="${source_arra[0]:i:5};"
        else
                new_arra="${source_arra[0]:i:5}。"
        fi       
        b=`expr $b + 1`
        i=`expr $i + 5`
done

echo
printf "         %s \n" "悯农二首"
printf "           %s \n" "[唐.李绅]"
for y in  ${new_arra[@]};do
        echo -e "\t$y"
done
echo
exit

论坛徽章:
0
发表于 2018-10-25 11:57 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2018-10-25 12:01 编辑

啥叫模块化?哪个又叫抽象?

  1. $a = "春种一粒粟秋收万颗子四海无闲田农夫犹饿死锄禾日当午汗滴禾下土谁知盘中餐粒粒皆辛苦"
  2. $b = d:\ps脚本\an按字符数切割字符串,返回数组.ps1 -string输入字符串 $a -byte输入切割长度 5
  3. $b[0] + ',' + $b[1] + "。`n" +
  4. $b[2] + ',' + $b[3] + "。`n" +
  5. $b[4] + ',' + $b[5] + "。`n" +
  6. $b[6] + ',' + $b[7] + "。`n"
复制代码


输出:
春种一粒粟,秋收万颗子。
四海无闲田,农夫犹饿死。
锄禾日当午,汗滴禾下土。
谁知盘中餐,粒粒皆辛苦。


  1. #按字符数切割字符串,返回数组。2018-06-10
  2. #用法:
  3. #$a = & 'd:\你的ps目录\an按字符数切割字符串,返回数组.ps1' -string输入字符串 'abc,中英文字符数相同' -byte输入切割长度 5
  4. # '字符串' -split '(...)' 也行,只不过会有个空数组,在前面。



  5. param
  6. (
  7.         [String]$string输入字符串,
  8.         [byte]$byte输入切割长度
  9. )

  10. if ($string输入字符串.Length -le $byte输入切割长度)
  11. {
  12.         Write-Error '错误,字符串太短。或切割长度太长!'
  13.         exit 1
  14. }

  15. [System.Collections.ArrayList]$动态数组 = @()
  16. $输入字符串长度 = $string输入字符串.Length

  17. $开始位置 = 0
  18. while ($开始位置 -lt $输入字符串长度)
  19. {
  20.         $temp01 = $开始位置 + $byte输入切割长度

  21.         if ($temp01 -le $输入字符串长度)
  22.         {
  23.                 $当前string = $string输入字符串.Substring($开始位置,$byte输入切割长度)
  24.         }
  25.         else
  26.         {
  27.                 $当前string = $string输入字符串.Substring($开始位置,($输入字符串长度 - $开始位置))
  28.         }

  29.     $null = $动态数组.add($当前string)
  30.         $开始位置 = $temp01
  31. }

  32. return $动态数组
复制代码


问:去哪学linux版的powershell?
答:
QQ群号=183173532
名称=powershell交流群
可以收取少许费用,群内远程帮你公司代培训员工。

论坛徽章:
0
发表于 2018-10-25 15:45 |显示全部楼层
  1. $str = '春种一粒粟秋收万颗子四海无闲田农夫犹饿死锄禾日当午汗滴禾下土谁知盘中餐粒粒皆辛苦'
  2. $wordofline = 5
  3. [Array]$result = $null
  4. $line = $Null
  5. for ($i = 1; $i -le $str.length; $i++) {
  6.     if (($i % ($wordofline*2)) -eq 0) {
  7.         $linetmp = $str.Substring(($i-10),($wordofline*2))
  8.         $line = $linetmp.Substring(0,$wordofline)+","+$linetmp.Substring($wordofline,$wordofline) +"。"+"`n"
  9.         $result += $line
  10.         $line = $Null
  11.     }
  12. }
  13. $result
复制代码


感谢 “随心” 分享的ps代码。 我一喊脚本题,好几个人写代码分享,这事挺好的。

论坛徽章:
0
发表于 2018-10-25 17:40 |显示全部楼层
再来个awk的,【-love无】分享:
  1. echo 春种一粒粟秋收万颗子四海无闲田农夫犹饿死锄禾日当午汗滴禾下土谁知盘中餐粒粒皆辛苦 | awk 'BEGIN{FS=OFS=""}{for(i=1;i<=NF;i++){if(i%10==0&&i!=NF){printf $i"\n"}else{printf $i}}print ""}' | awk 'BEGIN{FS=OFS=""}{for(i=1;i<=NF;i++){if(i%5==0&&i!=NF){printf $i","}else{printf $i}}print ""}' | awk 'BEGIN{FS=OFS=""}{for(i=1;i<=NF;i++){if(i%11==0&&i!=NF){printf $i""}else{printf $i}}print "。"}'

复制代码

论坛徽章:
0
发表于 2018-10-26 10:01 |显示全部楼层
回复 8# 本友会机友会摄友会

{if(i%10==0&&i!=NF){printf $i"\n"}else{printf $i}}print ""}

您好!这段代码可以解释一下吗?


谢谢!

论坛徽章:
0
发表于 2018-10-26 10:01 |显示全部楼层
回复 7# 本友会机友会摄友会

这个是c写的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP