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,正如您在评论中确认的那样。
我编写了以下代码行,它通过分隔符后字符串的第一次出现来分解字符串。
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,正如您在评论中确认的那样。