我有这种格式的制表符分隔的.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,所以到目前为止我的所有尝试都远未接近过。不知道从哪里开始!
答案 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