我编写了以下代码行,它在分隔符后第一次出现字符串时会爆炸字符串。
echo "$line" | awk -F':' '{ st = index($0,":");print "field1: "$1 "
=> " substr($0,st+1)}';
但我不想显示它。想要在变量中出现两次,所以我尝试了下面的代码
explodetext="$line" | awk -F':' '{ st = index($0,":")}';
示例数据:
id:1
url:http://test.com
预期的OutPUt将是:
key=id
val=1
key=url
val=http://test.com
但没有按预期工作。任何解决方案?
由于
答案 0 :(得分:1)
您的代码已扩展:
echo "$line" \
| awk -F':' '
{
st = index($0,":")
print "field1: " $1 " => " substr($0,st+1)
}'
此输出仅显示根据第一个冒号分割线。根据您提供的示例数据,您的行似乎包含两个字段,这些字段由找到的第一个冒号分隔。这意味着您无法安全地使用awk的字段分隔符来查找数据(尽管您可以将其用于字段名称),从而使index()
成为合理的方法。
一种策略可能是将您的输入放入数组中以进行评估:
#!/usr/bin/awk -f
BEGIN {
FS=":"
}
{
record[$1]=substr($0,index($0,":")+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."
}
}
答案 1 :(得分:0)
我认为你的文本文件 input.txt 以下面给出的格式存储:
id:1
url:http://test1.com
您可以使用下面的代码,例如 awkscript 来实现您的目标:
#!/bin/bash
awk '
BEGIN{FS=":"}
{
if ($2 > 0) {
if ( getline > 0){
st = index($0,":")
url = substr($0,st+1);
system("echo Do something with " url);
}
}
}' $1
将代码运行为 ./ awkscript input.txt
注意:我认为输入文件只包含您在评论中确认的一个ID /网址对。