unix中基于列值的文本文件拆分

unix中基于列值的文本文件拆分,unix,awk,split,grep,Unix,Awk,Split,Grep,我有一个文本文件: head train_test_split.txt 1 0 2 1 3 0 4 1 5 1 我要做的是将第二列值为1的第一列值保存到文件train.txt 因此,第二列值与1对应的第一列值为:2,4,5。因此,在我的train.txt文件中,我想要: 2 4 5 如何在unix上轻松地执行此操作?您可以使用awk执行此操作: awk '$2 == 1 { print $1 }' inputfile 就是, $2==1是一个过滤器, 匹配第二列为1的行, 而print$

我有一个文本文件:

head train_test_split.txt 
1 0
2 1
3 0
4 1
5 1
我要做的是将第二列值为1的第一列值保存到文件
train.txt

因此,第二列值与1对应的第一列值为:2,4,5。因此,在我的train.txt文件中,我想要:

2
4
5

如何在unix上轻松地执行此操作?

您可以使用
awk
执行此操作:

awk '$2 == 1 { print $1 }' inputfile
就是,
$2==1
是一个过滤器, 匹配第二列为1的行,
print$1
意味着要打印第一列。

您可以使用
awk
进行此操作:

awk '$2 == 1 { print $1 }' inputfile
就是,
$2==1
是一个过滤器, 匹配第二列为1的行, 而
print$1
意味着打印第一列。

在Perl中:

$ perl -lane 'print "$F[0]" if $F[1]==1' file
或GNU grep:

$ grep -oP '^(\S+)(?=[ \t]+1$)' file
但是
awk
是最好的。在Perl中使用awk…

$ perl -lane 'print "$F[0]" if $F[1]==1' file
或GNU grep:

$ grep -oP '^(\S+)(?=[ \t]+1$)' file

但是
awk
是最好的。使用awk…

或仅使用
$2
的“真实性”将起作用:
awk'$2{print$1}'
@dawg用于给定样本是,但未指定第二列仅具有0和1值。或仅使用
$2
的“真实性”将起作用:
awk'$2{print$1}'
@dawg用于给定样本是,但是没有指定第二列只有0和1个值。您的
grep
是否支持
-P
(-perl regexp)?您的
grep
是否支持
-P
(-perl regexp)?grep可以简化为
grep-oP'^\S+(?=\h+1$)
grep可以简化为
grep-oP'^\S+(?=\h+1$)“