免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1803 | 回复: 2
打印 上一主题 下一主题

[FreeBSD] 请教个xargs给shell传参的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-18 21:01 |只看该作者 |倒序浏览
现有一个文件1.txt:
abcde
abc
abcd
ab

希望处理结果为:
5 abcde
4 abcd
3 abc
2 ab

其实就是把文件按照每一行字符数量排序。我用其他分行处理的方法为:

cat 1.txt | awk '{print length($0)" "$0}' | sort -r

cat 1.txt | while read line; do echo $(gexpr length $line)" "$line; done | sort -r

都没问题(由于不会用bsd版本的expr,所以这里用的是gnu expr)。

但是在使用xargs处理时:
cat 1.txt | xargs -I @ echo $(gexpr length @)" "@\n | sort -r
结果为:

1 abcde
1 abc
1 abcd
1 ab

我知道问题是由$(gexpr length @)这里产生的,第一步处理完毕经由管道到第二步时,会优先解释gexpr length @,而这时它并不会把@替换为第一步的运行的结果。所以把其当作常量字符串来取长度了。请问有没有办法让其先将@替换为第一步执行的结果?


此问题比较蛋疼,前两种方法已经实现了,而且xargs的参数长度有限制,并不是最合适的选择。但我确实想知道是否有解决的办法。请大家多多指教。

论坛徽章:
0
2 [报告]
发表于 2012-01-18 22:26 |只看该作者
你应该去shell版问撒

论坛徽章:
0
3 [报告]
发表于 2012-01-19 21:03 |只看该作者
嗯,多谢楼上,只是我系统带的工具都是bsd版的,所以跑这里来问了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP