【问题标题】:Parsing and applying function on parsed values in bash scripting在 bash 脚本中解析和应用函数解析值
【发布时间】:2011-11-26 13:39:38
【问题描述】:

我的脚本中有以下内容:

function processurl
{
}

some_text%%%url1%%%url2%%%url3%%%

url 的数量在 0 到任意有限数之间变化(如果为 0,则字符串为 some_text%%%)

我想将 processurl 应用于 url 并将输出作为:

some_text%%%processurl url1%%%processurl url2%%%processurl url3%%%

关于如何做到这一点的任何线索?

【问题讨论】:

    标签: bash sed awk cut tr


    【解决方案1】:

    这实际上和这个问题相同(也来自你) Scripting in Bash

    您可以将您的 processURL 函数保存为脚本,期待参数,并在 awk 中将 $i 发送到该脚本,并获得结果。 (你可以在 awk 中使用 getline)。

    见我在另一个问题中的回答,有一个例子。

    【讨论】:

    • 非常感谢。确实是一样的,只是那个问题不是很清楚。在编辑帖子后,我觉得这可能会使其他建议的答案看起来无关紧要。再次感谢您的回答:)
    • 关于“间距”问题(或者更确切地说是 i 中的任何特殊字符)的任何想法
    【解决方案2】:

    在 awk 这样的语言中,您不能将函数作为参数传递。所以你必须反过来做。首先,您必须拆分输入,对其进行处理并再次加入。你可以这样做:

    这将拆分输入:

    awk -F"%%%" '{for(i=2;i<=NF;i++){if (i==NF){print ""}else print $i}}' file
    

    现在您可以逐行阅读并应用您的函数,您应该将其保存在 shell 脚本“processurl”中:

    | while read url; do ./processurl $url; done
    

    然后再次加入:

    awk 'BEGIN{RS=""}{for (i=1;i<=NF;i++)
        {if (i==NF){printf "\s%%%%%%\n",$i}else{printf "%s%%%%%%",$i}}}'
    

    HTH 克里斯

    【讨论】:

    • 正如@Kent 所建议的那样,您可以避免被建议的解决方案分割和加入。
    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 2021-12-03
    • 2013-04-21
    • 2010-12-06
    • 2013-08-30
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多