免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Looiml
打印 上一主题 下一主题

[文本处理] 讨论:shell模拟python中序列重复运算符(*)的最简方式? [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
11 [报告]
发表于 2015-01-07 17:56 |只看该作者
本帖最后由 bikkuri 于 2015-01-07 17:57 编辑

你可以定义一个函数,以后调用就方便了。
  1. i(){ for x in $(seq $1);do printf abc;done;};i 20
复制代码
或者:
  1. i(){ for x in $(seq $1);do printf $2;done;};i 20 abc
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
12 [报告]
发表于 2015-01-07 18:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
13 [报告]
发表于 2015-01-07 19:15 |只看该作者
本帖最后由 jason680 于 2015-01-07 19:16 编辑

回复 1# Looiml

what is your 复杂的命令(or job)?
   

论坛徽章:
0
14 [报告]
发表于 2015-01-07 20:32 |只看该作者
呵呵,大伙儿都来了,蓬荜生辉呀。
各位扯远了,函数或者函数库,肯定不陌生啦,只是探索一下语句本身的可能性。凡事皆有两面,它们可能会造成一定程度上移植过程的冗余和可读性的降低。如果能在保证简洁和效率的某个范围内简单实现,不是更好吗?像5楼ly5600113的solution我觉得还蛮ok呀。
我本人喜欢在有疑问的时候多想想啊,穷则思变嘛,我觉得需求和变化永远都是世界发展的动力,需求促使人类世界的方方面面不断演进和完善。
坦白讲,我学shell不到两个月呀,看完ABS就到这里来混了,我发现学习过程中适当钻钻牛角尖,可以加深对知识本身的掌握耶!好吧,我也扯远了~

论坛徽章:
0
15 [报告]
发表于 2015-01-07 20:37 |只看该作者
回复 13# jason680
让我萌生这个疑问的就是前段时间解生成菱形那个题目,如果有直观的生成n个*的字串,势必代码会简单许多,而不是在shell或awk中用for,于是我后面就用sed写的另辟蹊径的方式。
  1. $>read n;((m=n/2+1));s=;for i in `seq $n`;do s="$s ";done;t="*";(for j in `seq $m`;do echo "$s$t$s";t="*$t*";done)|sed -r "s/(.*)(.{$n})\1/\2/"|tee $;tac $|tail -n +2;rm $
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
16 [报告]
发表于 2015-01-07 23:11 |只看该作者
回复 15# Looiml

Would you like this way ...

$ echo "* 5" | awk '{OFS=$1;NF=$2;$2=""}1'
*****

$ echo "* 33" | awk '{OFS=$1;NF=$2;$2=""}1'
*********************************

$ echo "abc 5" | awk '{OFS=$1;NF=$2;$2=""}1'
abcabcabcabcabc

$ echo "* 5" | perl -lane 'print $F[0] x $F[1]'
*****

$ echo "* 5" | perl -lape '$_=$F[0] x $F[1]'
*****

   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
17 [报告]
发表于 2015-01-08 08:42 |只看该作者
回复 14# Looiml


两个月学成这样已经不错啦,加油。
提醒一下,5楼的方案有个局限性,很多系统是没有seq命令的。

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
18 [报告]
发表于 2015-01-08 09:46 |只看该作者
献个丑
  1. printf 'abc%.0s' {1..100}
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
19 [报告]
发表于 2015-01-08 09:54 |只看该作者
回复 1# Looiml
  1. length=40
  2. printf -v line '%*s' "$length"
  3. echo ${line// /-}
  4. ----------------------------------------

  5. eval printf -v line '%.0s-' {1..$length}
  6. ----------------------------------------
复制代码

论坛徽章:
0
20 [报告]
发表于 2015-01-08 11:25 |只看该作者
回复 16# jason680
感谢,思路上有借鉴意义。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP