AWK 查找第一次出现的字符串并分配给变量进行比较

AWK to to find first occurrence of string and assign to variable for compare

我编写了以下代码行,它通过分隔符后字符串的第一次出现来分解字符串。

echo "$line" | awk -F':' '{ st = index([=10=],":");print "field1: " "
    =>  " substr([=10=],st+1)}';

但是我不想显示它。想要在变量中同时出现,所以我尝试了以下代码

explodetext="$line" | awk -F':' '{ st = index([=11=],":")}';

示例数据:

id:1
url:http://test.com

预期输出为:

key=id
val=1

key=url
val=http://test.com

但不能用作 expected.Any 解决方案?

谢谢

你的代码,展开:

echo "$line" \
| awk -F':' '
    {
      st = index([=10=],":")
      print "field1: "  " => " substr([=10=],st+1)
    }'

这个输出看起来只是根据第一个冒号分割了行。从您提供的示例数据来看,您的行似乎包含两个字段,它们由找到的 first 冒号分隔。这意味着您不能安全地使用 awk 的字段分隔符来查找您的数据(尽管您可以将其用于字段名称),使 index() 成为一种合理的方法。

一种策略可能是将您的输入放入数组中以进行评估:

#!/usr/bin/awk -f

BEGIN {
  FS=":"
}

{
  record[]=substr([=11=],index([=11=],":")+1);
}

END {
  if (record["id"] > 0) {
    printf("Record ID %d had a value of %s.\n", record["id"], record["url"])
  } else {
    print "No valid records found."
  }
}

我假设您的文本文件 input.txt 以如下格式存储:

id:1
url:http://test1.com

您可以使用下面的代码,比如 awkscript,来实现您想要的:

#!/bin/bash
awk '
BEGIN{FS=":"}
{
if ( > 0) {
  if ( getline > 0){
  st = index([=11=],":")
  url = substr([=11=],st+1);
  system("echo Do something with " url);
  }
  }
}' 

运行 代码为 ./awkscript input.txt

注意:我假设输入文件仅包含一对 id/url,正如您在评论中确认的那样。