带点(.)的bash命令的最终结果
我有一个bash脚本,可以在这里对/etc/passwd中的信息进行greps和排序带点(.)的bash命令的最终结果,bash,shell,sorting,unix,grep,Bash,Shell,Sorting,Unix,Grep,我有一个bash脚本,可以在这里对/etc/passwd中的信息进行greps和排序 export FT_LINE1=13 export FT_LINE2=23 cat /etc/passwd | grep -v "#" | awk 'NR%2==1' | cut -f1 -d":" | rev | sort -r | awk -v l1="$FT_LINE1" -v l2="$FT_LINE2" 'NR>=l1 && NR<=l2' | tr '\n' ',' |
export FT_LINE1=13
export FT_LINE2=23
cat /etc/passwd | grep -v "#" | awk 'NR%2==1' | cut -f1 -d":" | rev | sort -r | awk -v l1="$FT_LINE1" -v l2="$FT_LINE2" 'NR>=l1 && NR<=l2' | tr '\n' ',' | sed 's/, */, /g'
如何用点(.)替换最后一个逗号?我希望它看起来像这样
sstq_, sorebrek_brk_, soibten_, sirtsa_, sergtsop_, sec_, scodved_, rlaxcm_, rgmecived_, revreswodniw_, revressta_.
您可以添加:
| sed 's/,$/./'
(其中,$
表示“行尾”)。您可以添加:
| sed 's/,$/./'
(其中,
$
表示“行尾”)。在您的命令中有许多管道,其中一些管道可以删除
正如评论中所解释的那样,猫grep是一种坏习惯!!!通常,cat | cmd
应替换为cmd
或cmd
,具体取决于命令接受的参数类型
对于要处理的几GB大小的文件,您已经感受到了差异
也就是说,您可以通过使用awk
来完成整个处理,而无需使用单个管道,例如:
awk -v l1="$FT_LINE1" -v l2="$FT_LINE2" 'function reverse(s){p=""; for(i=length(s); i>0; i--){p=p substr(s,i,1);}return p;}BEGIN{cmp=0; FS=":"; ORS=","}!/#/{cmp++;if(cmp%2==1) a[cmp]=reverse($1);}END{asort(a);for(i=length(a);i>0;i--){if((length(a)-i+1)>=l1 && (length(a)-i)<=l2){if(i==1){ORS=".";}print a[i];}}}' /etc/passwd
awk-vl1=“$FT_-LINE1”-vl2=“$FT_-LINE2”函数反转{p=“”;for(i=length(s);i>0;i--){p=p substr(s,i,1);}返回p;}开始{cmp=0;FS=“:”;“ORS=”,“}/#/{cmp++;if(cmp%2==1)a[cmp]=reverse($1);}END{asort(a);for(i=length(a);i>0;i--){if(length(a)-i+1)>=l1&(length(a)-i在您的命令中有很多管道,其中一些管道可以删除
正如注释cat | grep
是一种坏习惯!!!通常,cat | cmd
应替换为cmd
或cmd
,具体取决于命令接受的参数类型
对于要处理的几GB大小的文件,您已经感受到了差异
也就是说,您可以通过使用awk
来完成整个处理,而无需使用单个管道,例如:
awk -v l1="$FT_LINE1" -v l2="$FT_LINE2" 'function reverse(s){p=""; for(i=length(s); i>0; i--){p=p substr(s,i,1);}return p;}BEGIN{cmp=0; FS=":"; ORS=","}!/#/{cmp++;if(cmp%2==1) a[cmp]=reverse($1);}END{asort(a);for(i=length(a);i>0;i--){if((length(a)-i+1)>=l1 && (length(a)-i)<=l2){if(i==1){ORS=".";}print a[i];}}}' /etc/passwd
awk-vl1=“$FT_-LINE1”-vl2=“$FT_-LINE2”函数反转{p=”“;for(i=length(s);i>0;i--{p=p substr(s,i,1);}return p;}BEGIN{cmp=0;FS=“:”;ORS=“,”}!/{cmp++;if(cmp%2==1)a[cmp]=reverse($1)}END{asort(a);for(i=length(a);i=length(a)}为什么rev
在对行进行排序之前就要对行进行排序?。| cut-f1-d:“| sort-r
会给出相同的结果。然后,grep
在文件上工作,因此您不需要cat
-而是grep-v”#”/etc/passwd | awk…
-这是从管道中删除的两个进程。您需要恢复所有用户的原因是什么?为什么要在对行进行排序之前恢复这些行?…| cut-f1-d”:| sort-r
会给您相同的结果。然后,grep
在文件上工作,因此您不需要cat
-而是grep-v“|”/etc/passwd | awk…
-这是从管道中删除的两个进程。您需要恢复所有用户有什么原因吗?我认为这不起作用,我只想替换最后一个命令。我不认为这会起作用,我只想替换最后一个命令。我最终将在下次使用它!但现在,我能做些什么吗加上我在上面写的,用句号替换列表末尾的逗号?@GabeSpound:然后你可以使用ruakhsed's/,$/./’的解决方案,它应该可以正常工作;-)下一次肯定会用到这个!但是现在,我可以在上面写的内容中添加任何东西,用句号替换列表末尾的逗号吗?@GabeSpound:然后你可以使用ruakhsed的/,$/”
的解决方案,它应该可以正常工作;-)