同时获取线条的第一个元素,另一个元素以一个特定单词的速度获取



基本上我有一个具有此格式的文件:

12:23:36 some text here length 256 some text here
12:24:37 some text here length 23 some text here

随着单词数量的变化,我只能使用shell命令获得时间戳和长度值。我知道如何分别(分别使用尴尬和grep(做它们,但我找不到一种正确的方法。

编辑:这是我的线的结构,IP已修改(我从TCPDUMP中得到(:

06:30:51.498909 IP 2.2.2.2 > 1.1.1.1: Flags [.], ack 2326465, win 65535, length 0
06:30:51.609162 IP 3.3.3.3 > 4.4.4.4: Flags [.], ack 1654645, win 65535, length 0

长度并不总是最后一个数字,某些部分中可能会有更多文本

使用 sed

sed -E 's/^(..:..:..).*length.*([0-9]+).*/1 2/' file
  • -E-使用扩展的正则表达式
  • ^(..:..:..)捕获时间戳
  • ([0-9]+)匹配长度
  • 1 2用匹配的零件替换整个线

对于您的文件,它给出了此输出:

12:23:36 256
12:24:37 23

如果您的文本不包括数字,则可以使用sed并删除所有[a-zA-Z]字符:

sed 's/[A-Za-z]*//g' file

$ cat test
12:23:36 some text here length 256 some text here
12:24:37 some text here length 23 some text here
$ sed 's/[A-Za-z]*//g' test
12:23:36     256
12:24:37     23

另一种解决方案将使用awk打印第一列,并如本答案所述提取数字部分。我不是awk专家,但应该是:

gawk -F' [^0-9]* ' 'BEGIN { ORS=" " };{print $1} {print $0=$2"n"}' file

如果时间戳始终处于线路的开头,

您可以尝试此SED

sed -E 's/([^. ]*).*length ([^ ]*).*/1 2/' infile

最新更新