如果特定列包含值> 0,则打印行

时间:2015-11-11 13:18:23

标签: perl shell unix text awk

我有这种格式的制表符分隔的.txt文件,其中包含许多符号,数字和字母:

MUT 124 GET 288478  0   *       =   288478  0
MUT 15  GET 514675  0   75MH    =   514637  -113
MUT 124 GET 514637  0   75MH    =   514675  113

我想识别第9列中包含> 0值的所有行(即,仅提取上面的第3行),然后从任何匹配的行打印列4 + 9。

所需的输出(两列制表符分隔的.txt文件):

514637    113

在终端/命令行中是否有快速方法可以执行此操作。如果是这样,怎么样?

我刚刚开始学习awk和perl,所以到目前为止我的所有尝试都远未接近过。不知道从哪里开始!

3 个答案:

答案 0 :(得分:4)

Perl中的轻松

perl -lane 'print "$F[3]\t$F[8]" if $F[8] > 0' < input-file
  • -l为您打印的所有内容添加换行符
  • -a将输入拆分为@F数组
  • -n逐行处理输入行

答案 1 :(得分:3)

可以使用Perl one-liner

完成
$ perl -anE 'say join "\t", @F[3,8] if $F[8] > 0' data.txt
  • -n(非自动打印) - 循环播放行,阅读但不打印
  • -a(自动拆分) - 将$_中存储的输入行拆分为@F数组(空格是默认分隔符,将其更改为-F,例如。 -F:
  • -E 'CODE'(执行) - 为您的Perl版本执行'CODE'启用功能包(如use 5.010

有关详情,请参阅perlrun

答案 2 :(得分:1)

awk几乎自动处理它!

awk '$9>0 {print $4,$9}' file

如果需要指定输入和输出分隔符,请说:

awk 'BEGIN{FS=OFS="\t"} $9>0 {print $4,$9}' file