我有两个文本文件F1a.txt
和F1b.txt
,其数据基本相同:驾驶员的姓氏和国籍。例如:
Hamilton GBR
Alonso SPA
我已将这两个文件连接到F1_drivers.txt
.我该如何执行以下操作?
使用管道显示英式
F1a.txt
和F1b.txt
的驱动程序,按字母顺序排序。输出当前目录中的一长串文件,写入名为
listing
.切换到一个新目录并将该目录中的一长串文件附加到
listing
.GER
Grep 查找以. 开头F1
和结尾的所有文件中的字符串.txt
。执行#4,但将输出通过管道传输到
cat
创建一个包含输出的文件,名为grepout.txt
我已获得基本信息来提供帮助,但不知道该去哪里。
答案1
cat F1a.txt F1b.txt | grep British | sort -d
我们使用 cat 来读取 *nix 系统上的文件内容。
然后,我们使用管道(字符 |)将 cat 的输出输入到 grep 中。
然后,我们使用命令 grep 在 cat 的输入中搜索“British”一词,然后 grep 过滤输出以显示正确的行。
然后,我们使用另一个管道将 grep 的输出输入 sort,正如您可能猜到的那样,它对其输入进行排序。我们使用 -d 参数按字母顺序对其进行排序。ls -al > listing
为此,我们需要使用 shell I/O 重定向运算符“>”。
当您使用它时,后跟一个文件,BASH 的作用如下:
它接受 STDOUT 或标准输出(命令行或工具输出),
如果该路径存在文件,它将用 STDOUT 中的新数据覆盖它,否则它会创建文件并将数据从 STDOUT 写入其中。
我们使用 ls 来提供工作目录的信息,并为其提供 -al 参数,该参数实际上告诉它以 -longlisting 格式显示 -allfiles。
然后,我们使用 > 重定向运算符将 ls 的输出放入文件列表中。cd a/directory/
ls -al >> /path/to/listing
cd 切换目录。我所说的 cd a/directory/ 的意思是选择一个随机目录并将其与命令一起使用,而不是字面上的 cd 到 a/directory/ ,除非那是您真正想要做的。
然后,我们重用之前的 ls 命令 - 记住,-allfiles,-longformat - 并且我们使用不同的 shell 重定向命令。这次,我们使用 >>,它接受 STDOUT 并将其附加到随后指定的文件中,然后将其发送到文件列表中,无论您在哪里创建它。cat F1*.txt | grep GER
在这一点上,我们所做的事情与第一点相同 - 使用 cat 从文件中读取数据,并使用 grep 进行搜索。然而,我们正在使用另一个新的 shell 运算符,这次是星号,通常称为通配符。 F1*.txt 告诉 shell 要做的事情本质上是这样的:
在当前目录中,因为我们没有指定另一个目录 - 浏览所有文件。如果它们以 F1 开头,之后有任何内容,并以 .txt 结尾,则返回该文件名。当我们这样做时,cat 会获得多个文件,并且它会完成它的工作 - 它将指定的文件内容连接到 STDOUT 中。
然后,我们通过管道将 STDOUT 中的所有信息输入 grep,就像我们之前所做的那样,并告诉它搜索 GER。cat F1*.txt | grep GER | cat > grepout.txt
然后我们可以做的是,再次通过管道将 grep 的输出作为输入给 cat - 然后像我们之前那样通过 > 运算符保存 cat 的输出 - 完成整个 she-bang。