我有一个文本文件作为这样的输入:让它说为xyz.txt
TIME SR No TYPE DATA
2.046103 1 1 Tx d 8 01 01 01 99 9A 9B 9C 9D
2.046163 3 1 Rx d 8 01 01 01 99 9A 9B 9C 9D
2.046361 2 1 Rx d 8 01 01 01 99 9A 9B 9C 9D
2.046916 1 3 Tx d 8 01 01 01 9B 9C 9D 9E 9F
2.046977 3 3 Rx d 8 01 01 01 9B 9C 9D 9E 9F
2.047177 2 3 Rx d 8 01 01 01 9B 9C 9D 9E 9F
2.048034 1 5 Tx d 8 01 01 01 AD AE AF B0 B1
2.048095 3 5 Rx d 8 01 01 01 AD AE AF B0 B1
2.048295 2 5 Rx d 8 01 01 01 AD AE AF B0 B1
2.050006 1 8 Tx d 8 01 01 01 B1 B2 B3 B4 B5
2.050065 3 8 Rx d 8 01 01 01 B1 B2 B3 B4 B5
2.050265 1 8 Rx d 8 01 01 01 B1 B2 B3 B4 B5
2.050632 2 601 Rx d 8 01 01 01 CA CB CC CD CE
2.050690 3 700 Rx d 8 01 01 01 CA CB CC CD CE
2.050887 1 700 Rx d 8 01 01 01 CA CB CC CD CE
要求:我喜欢从包含SR“1”和TYPE为“Rx”的行中提取第一个数字字符串(TIME)
我几乎不懂perl并在互联网上阅读了一个命令,即:
perl -nle "print if /"1"\s(.+?)"Rx"/" xyz.txt >>output.txt
用于提取匹配的行
我在output.txt中得到的输出是:
2.046163 3 1 Rx d 8 01 01 01 99 9A 9B 9C 9D
2.046361 2 1 Rx d 8 01 01 01 99 9A 9B 9C 9D
2.050265 1 8 Rx d 8 01 01 01 B1 B2 B3 B4 B5
2.050632 2 601 Rx d 8 01 01 01 CA CB CC CD CE
2.050887 1 700 Rx d 8 01 01 01 CA CB CC CD CE
所需的输出(要求)仅限于:
2.050265
2.050887
以上两个值的完整信息来自xyz.txt:
2.050265 1 8 Rx d 8 01 01 01 B1 B2 B3 B4 B5
2.050887 1 700 Rx d 8 01 01 01 CA CB CC CD CE
帮助我......我需要做些什么改变,以便满足:
一个。只考虑Rx行中的“1”而不是xyz.txt文件中的No行。
湾删除output.txt
中除第一个字符串之外的所有字符串答案 0 :(得分:3)
$ perl -ane '{print "$F[0]\n" if $F[1] == 1 && $F[3] eq "Rx"}' xyz.txt
2.050265
2.050887
答案 1 :(得分:1)
在正则表达式中使用分组来执行此操作:
perl -nle 'print $1, "\n" if /^([0-9\.]+) 1\s(.+?)Rx/' xyz.txt >>output.txt
答案 2 :(得分:1)
我会避免正则表达式难以维护。
perl -lne '@a=split; print "$a[0]" if (($a[1] == 1) and ($a[3] eq "Rx"))'
说明:
此外,命令行还会切换:
答案 3 :(得分:0)
perl -nle 'print $1 if m/^(\S+)\s1\s.*Rx/' xyz.txt >>output.txt