Bash Shell保留部分输入行

你只想保留部分输入行,例如第一个和最后一个字段。举例来说,你希望 ls 只列出文件名和权限,不需要 ls -l 所提供的其他信息。可惜的是,ls 并没有相应的选项能够按照这种方式限制输出。

解决方案

可以通过管道将 ls 的输出传给 awk,并从中挑选出你需要的字段。

$ ls -l | awk '{print $1, $NF}'
total 151130
-rw-r--r-- add.1
drwxr-xr-x art
drwxr-xr-x bin
-rw-r--r-- BuddyIcon.png
drwxr-xr-x CDs
drwxr-xr-x downloads
drwxr-sr-x eclipse
...
$

讨论

思考 ls -l 命令的输出。其形式如下所示:

drwxr-xr-x 2 username group        176 2006-10-28 20:09 bin

对于 awk 而言,解析这种输出易如反掌(在 awk 中,默认的字段分隔符为空白字符)。

在输出文件名时,我们用了点小技巧。在 awk 中,各种字段是用美元符号和字段编号来引用的(如 $1$2$3),而且 awk 还有一个内建变量 NF,其中保存着当前行中的字段总数,$NF 总是引用最后一个字段。(例如,ls 的输出行共有 8 个字段,因此变量 NF 的值就是 8,$NF 指向的就是输入行中的第 8 个字段,在这个例子中就是文件名)。

记住,读取 awk 变量时不需要使用 $(这一点和 bash 变量不同)。NF 本身就是一个有效的变量引用。在其之前加上 $ 就将其含义从“当前行的字段总数”改成了“当前行的最后一个字段”。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!