跳转到内容

从 Unix 命令行进行即席数据分析/预备知识

来自维基教科书,开放的书籍,开放的世界

在展示命令行示例交互时,将使用这些排版约定

$ command argument1 argument2 argument3 
output line 1 
output line 2 
output line 3 
[...]

$ ” 是 shell 提示符。您键入的内容将以粗体显示;命令输出以常规类型显示。

示例数据

[编辑 | 编辑源代码]

我将在示例中使用以下示例文件。

Unix 密码文件

[编辑 | 编辑源代码]

密码文件可以在 /etc/passwd 中找到。系统上的每个用户在该文件中都有一行(记录)。每个记录都有七个字段,用冒号(':')字符分隔。这些字段是用户名、加密密码、用户 ID、默认组、gecos、主目录和默认 shell。我们可以使用 head 命令查看前几行,该命令只打印文件的头几行。相应地,tail 命令只打印最后几行。

$ head -5 /etc/passwd 
root:x:0:0:root:/:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin 
daemon:x:2:2:daemon:/sbin:/sbin/nologin 
adm:x:3:4:adm:/var/adm:/sbin/nologin 
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

人口普查数据

[编辑 | 编辑源代码]

美国人口普查局在 其网站上发布了公共使用微数据样本 (PUMS)。我们将使用华盛顿州数据的 1% 样本,文件 pums_53.dat,可以从 这里下载。

$ head -2 pums_53.dat 
H000011715349 53010 99979997 70 15872 639800 120020103814700280300000300409 
02040201010103020 0 0 014000000100001000 0100650020 0 0 0 0 0000 0 0 0 0 0 
05000000000004400000000010 76703521100000002640000000000
P00001170100001401000010420010110000010147030400100012005003202200000 005301000
000300530 53079 53 7602 76002020202020202200000400000000000000010005 30 53010
70 9997 99970101006100200000001047904431M 701049-20116010 520460000000001800000
00000000000000000000000000000000000000001800000018000208

重要说明:此数据文件的格式在可从 这里下载的 Excel 电子表格中进行了描述。

开发人员效率与计算机效率

[编辑 | 编辑源代码]

这里讨论的技术在开发人员时间方面通常非常高效,但在计算资源(CPU、I/O、内存)方面通常效率较低。这种蛮力和无知可能不优雅,但当您还不了解问题的范围时,通常最好花 30 秒编写一个运行 3 小时的程序,而不是反过来。

在线手册

[编辑 | 编辑源代码]

"man" 命令显示有关给定命令的信息(俗称命令的“手册页”)。在线手册页是非常宝贵的资源;如果您对这里介绍的命令进行任何严肃的工作,最终您会从头到尾阅读所有手册页。在 Unix 文档中,命令(或函数、或文件)的手册页通常称为 command(n)。数字“n”指定手册的某个部分,以消除存在于多个部分中的条目的歧义。因此,passwd(1) 是 passwd 命令的手册页,passwd(5) 是 passwd 文件的手册页。在 Linux 系统上,您可以通过将部分号作为第一个参数给出,如“man 5 passwd”来请求手册的特定部分。以下是 man 命令对自己的说法

$ man man 
man(1)                                                        man(1) 
NAME
       man - format and display the on-line manual pages 
       manpath - determine user's search path for man pages 

SYNOPSIS 
       man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C 
       config_file] [-M pathlist] [-P pager] [-S section_list] 
       [section] name ... 

DESCRIPTION 
       man formats and displays the on-line manual pages. If you 
       specify section, man only looks in that section of the 
       manual. name is normally the name of the manual page, 
       which is typically the name of a command, function, or 
       file. [...]

标准输入、标准输出、重定向和管道

华夏公益教科书