Bash Shell颠倒每行的单词

Bash Shell颠倒每行的单词,你想按照逆序输出输入行中的单词。

解决方案

$ awk '{
>     for (i=NF; i>=0; i--) {
>         printf "%s ", $i;
>     }
>     printf "\n"
> }' <filename>

字符 > 不用你输入,shell 会输出该字符来提醒你还没有敲完命令(shell 在查找能配对的单引号)。由于 awk 程序位于单引号中,因此 bash shell 允许我们输入多行代码,同时使用 > 作为辅助提示符,直到我们给出与先前匹配的结束单引号。考虑到可读性,我们在程序中加入了空白字符,不过也完全可以写成一行。

$ awk '{for (i=NF; i>=0; i--) {printf "%s ", $i;} printf "\n" }'<filename>

讨论

awk 语言的 for 循环语法和 C 语言中的非常相似。前者甚至还支持用 printf 进行格式化输出,这自然也是从 C 语言(以及 bash)中学来的。我们用 for 循环从最后一个字段开始倒着处理到第一个字段,同时输出每个字段的内容。我们特意没有在第一个 printf 处加上 \n,这是因为想将多个字段输出在同一行中。for 循环结束后,输出换行符来结束输出行。

对于 $i 的引用,awk 与 bash 的含义大相径庭。在 bash 中,$i 表示要获取保存在变量 i 中的值。但在 awk 中,和大多数编程语言一样,要想引用变量 i 的值,写作 i 即可。那么 $i 在 awk 中是什么意思呢?变量 i 的值被解析成一个数字,然后“美元符号–数字”的表达式会被理解为引用某个输入字段(或单词),即第 i 个字段。因此,随着 i 从最后一个字段倒计到第一个字段,for 循环也就以逆序的方式输出了各个字段的内容。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!