【发布时间】:2016-08-30 21:26:53
【问题描述】:
我有一个简单的命令(bash 脚本的一部分),我正在通过 awk 进行管道传输,但如果不通过管道传输到 sed,似乎无法抑制最终记录分隔符。 (是的,我有很多选择,我的是 sed。)有没有不需要最后一个管道的更简单的方法?
dolls = $(egrep -o 'alpha|echo|november|sierra|victor|whiskey' /etc/passwd \
| uniq | awk '{IRS="\n"; ORS=","; print}'| sed s/,$//);
没有 sed,这会产生像 echo,sierra,victor, 这样的输出,我只是想去掉最后一个逗号。
【问题讨论】:
-
没有名为“IRS”的 awk 变量。有“RS”,默认情况下它是一个换行符,因此如果这是您的意图,则无需设置它。此外,除非行相邻,否则 uniq 不会检测重复条目,因此最好使用
sort -u代替,并且 egrep 会提取属于较大字符串的文本 - 这真的是您想要的吗?端到端地告诉我们您要如何处理示例输入和预期输出,我们可以为您提供帮助。 -
=符号周围不应有空格 -
感谢有关 IRS 的说明。我有点 awk 菜鸟,真的只用它来处理管道。如果它没有被忽略并且分隔符不是 \n 已经,我将不得不从错误中学习。 :) 我使用的是
uniq而不是sort -u,因为重复的名称来自/etc/passwd 中的一行:首先是用户名,然后是主目录。它们几乎可以保证是连续的。