【问题标题】:Splitting text file based on column value in unix基于unix中的列值拆分文本文件
【发布时间】:2017-10-12 20:45:40
【问题描述】:

我有一个文本文件:

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 上轻松做到这一点?

【问题讨论】:

  • 你的grep 支持-P (--perl-regexp) 吗?

标签: unix awk split grep


【解决方案1】:

您可以为此使用awk

awk '$2 == 1 { print $1 }' inputfile

也就是说, $2 == 1 是一个过滤器, 匹配第 2 列为 1 的行, print $1 表示打印第一列。

【讨论】:

  • 或者只是 $2 的“真实性”会起作用:awk '$2{print $1}'
  • @dawg 对于给定的样本是,但没有指定第二列将只有 0 和 1 值。
【解决方案2】:

在 Perl 中:

$ perl -lane 'print "$F[0]" if $F[1]==1' file

或 GNU grep:

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

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

【讨论】:

  • grep 可以简化为grep -oP '^\S+(?=\h+1$)'
猜你喜欢
  • 2018-04-06
  • 2015-12-03
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多