如何解析文件并检索某些单词

时间:2018-07-19 15:30:03

标签: bash shell parsing awk sed

文件中的文本如下:

 32 host1       dock0:network__cps-spr-adapter,network__cps-ocs-adapter
 33 host2       dock2:custom-work__ccep-sep-adapter
 34 host3       dock2:custom-work__gmsa-host,dock1:custom-work2
 35 host4       dock2:eodprvg__subsactivity

我想解析文件的每一行,并想检索带有前缀ocker0 / dock1 / dock2的单词

在上面的文本中,我的预期输出是:

dock0:network__cps-spr-adapter
dock2:custom-work__ccep-sep-adapter
dock2:custom-work__gmsa-host
dock1:custom-work2
dock2:eodprvg__subsactivity

3 个答案:

答案 0 :(得分:0)

使用awk只需获取第三个字段:

NAs

答案 1 :(得分:0)

awk '{ print $3; }' your-input-file | awk -F, '{
  for (i = 1; i <= NF; i++) {
    if ($i ~ /^dock[0-2]:/) print $i;
  }
}'

根据您的输入产生以下输出。

dock0:network__cps-spr-adapter
dock2:custom-work__ccep-sep-adapter
dock2:custom-work__gmsa-host
dock1:custom-work2
dock2:eodprvg__subsactivity

更新:

Variant受@Cyrus的建议启发,该建议避免了流水线,并合并了@ sri-k的请求以匹配dock:

awk -F'[ ,]+' '{
  for (i = 3; i <= NF; i++) {
    if ($i ~ /^dock[0-2]?:/) print $i;
  }
}' your-input-file

答案 2 :(得分:0)

这可能对您有用(GNU sed):

sed '/\n/!s/[^ ,]\+/\n&\n/g;/^dock[012]/P;D' file

将行分割成单个单词,并仅打印以dock01开头的单词。