打印Unix Bash中文本文件每行的第一个单词

33

我想要打印文本文件每一行的第一个单词。每个单词由一个空格分隔。

cut -c 1 txt file 

这是我目前为止写的代码,但它只打印每行的第一个字符。 谢谢


cut -f 1 -d' ' <file> - Buddy
5个回答

41
打印整个单词时,请使用-f 1而不是-c 1。由于默认字段分隔符为制表符而不是空格,因此需要使用-d选项。
cut -d' ' -f1 filename

使用cut命令无法打印出最后两个单词,据我所知这是不可能的,因为它只能从行开头计数。改用awk命令:

使用cut命令无法打印出最后两个单词,据我所知这是不可能的,因为它只能从行开头计数。改用awk命令:

awk '{print $(NF-1), $NF;}' filename

谢谢大家,太好了。我该如何打印出最后两个单词? - ap1993
@ap1993 你不能只用 cut 命令,你可以使用 rev file | cut -d' ' -f1-2 | rev 或者使用 awk '{print $(NF-1),$NF}' file - Chris Seymour

34

你可以尝试

awk '{print $1}' your_file

11
read word _ < file
echo "$word"

这种解决方案的好处在于它不会超出第一行读取文件。即使是awk,它有一些非常简洁的语法,也必须明确地告诉它停止阅读第一行之后的内容。read每次只读取一行。而且它是bash内置命令(以及许多shell的内置命令),因此您无需运行新进程。

如果您想打印每行的第一个单词:

while read word _; do printf '%s\n' "$word"; done < file

但如果文件很大,那么使用awk或cut读取每一行会更快。


3

您可以使用:

cut -d\  -f1 file

说明:

  • -d 表示分隔符(这里使用 \ 表示空格)
  • -f 表示字段选择器

注意,在 \ 后面有一个空格。


1
您还可以写成 -d ' ' 以使空格更加明显。 - Chris Page

3

-c 代表字符,您需要使用 -f 来表示字段,-d 则用于指定空格作为分隔符而不是默认的制表符:

cut -d " " -f 1 file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接