Linux 提取文本文件指定字段中包含单词的行

Linux 提取文本文件指定字段中包含单词的行,linux,bash,shell,Linux,Bash,Shell,我在从文本文件中提取数据时遇到了一些问题,我将向您展示一个示例 以下是文本文件的格式: John England A Kyle Canada P Ash France P Alex Italy C Simon Germany C Thomas Netherlands P 现在我需要做的是,在按字母顺序对字段1进行排序之后,只选择具有第三个字段(如p)的字段,然后将它们放入另一个.txt文件中 这将是新文件的正确输出: Ash Kyle Thomas 如您所见,它们是按字母顺序排序的,只有第

我在从文本文件中提取数据时遇到了一些问题,我将向您展示一个示例

以下是文本文件的格式:

John England A
Kyle Canada P 
Ash France P
Alex Italy C
Simon Germany C
Thomas Netherlands P
现在我需要做的是,在按字母顺序对字段1进行排序之后,只选择具有第三个字段(如p)的字段,然后将它们放入另一个.txt文件中

这将是新文件的正确输出:

Ash
Kyle
Thomas
如您所见,它们是按字母顺序排序的,只有第三个字段值为p的才会放入新文件中

这就是我的目的:

cut -d ' ' -f1 file1.txt | sort
基本上只选择第一个字段并按字母顺序排序,我无法解决的是现在只选择第三个字段值为p的字段(不改变刚刚创建的顺序)


感谢所有愿意提供帮助的人。

您可以使用
awk
来实现以下目的:

awk '$3=="P"{print $1}' file1.txt | sort > file2.txt
或使用
grep

grep ' P$' file1.txt | sort

这里有一个带有
grep
'n'
cut
'n'
sort
的函数,它检查行是否以
p
结尾:

$ grep "P$" file | cut -d \  -f 1 | sort
Ash
Kyle
Thomas
如果要在第三个字段中输入
p
,请使用:

$ grep "^[^ ]\+ [^ ]\+ P$" file | cut -d \ -f 1 | sort

@太赫兹为什么你不能用awk?这只是一个标准的工具,像cut和sort基本上,这是家庭作业,我们从来没有使用过awk,所以我不应该使用它。好的,这似乎是可行的,但grep命令总是指第三个字段吗?如果我喜欢“灰烬P”呢?它不会也这样吗?它指的是行的末尾(
$
)。如果需要第三个字段:
grep“^[^]\+[^]\+P”file | cut-d \-f 1 | sort
Oh-right,但如果第三个字段作为第二个字段,则解决方案将不起作用。