2016-06-21 38 views
1

请原谅我的英文。在Awk中运行Sed命令(for循环)

我是新来的shell脚本,我试图运行桑达替换命令对每个元素中的使用分割字符串AWK

# !/bin/sh 
SCRIPT_DIR=`pwd` 
TEXT_FIELD=$SCRIPT_DIR/Field/textField 

FIELDS="code-text name-text" 
echo "$FIELD" | awk '{len = split($0,t," ") 
for (i=1; i<=len; i++) { 
    "sed -i 's/inputPlaceholder/t[i]/g' $TEXT_FIELD" 
} }' 

后循环当我运行它:$ sh code_sample.sh 这是不抛出错误,但不工作。

你能帮助我吗?我非常感激。


编辑

我的目标是读入code-text name-textarray[1] = "code-text"array[2] = "name-text"

然后,for循环将逐个读取,并将每个项目替换为给定文件中的inputPlaceholder字符串。

实施例:

输入:FILED = “代码文本名称文本”

输出(在文件中):基于文本>创建( “inputPlaceholder”)变为基于文本>创建(“代码-text“)并保存为code.txt,并使用相同的逻辑将name-text保存为name.txt。

+0

不工作怎么样?举例说明预期与实际产出的关系。顺便说一句,你的英语很好,所以你被赦免了。 –

+0

不。编号外壳是调用工具的环境。 Awk是处理文本的工具。猜猜哪一个适合调用sed(提示:这不是awk!)。您的问题包括简洁,可测试的示例输入和预期输出,所以我们可以帮助您做任何你正在尝试以正确的方式执行(不涉及awk调用sed!)。 –

+0

我已更新我的问题。请看一下。谢谢 –

回答

0

你可以用system("sed ....")来打电话,但这听起来像一个可怕的想法。例如,您必须确保替换文本在sed表达式中可以安全使用,否则命令会失败,无法执行某些输入。

此外,你将不得不逃离引号字符,因为通过编写sed -i '...你打破了awk文本引用。

如果你真的在做这样的文本处理,我会推荐比sh更高级的东西。 Python,Perl,Ruby和许多其他人都可以做到这一点。

如果你想一些具体的例子,你就不得不说你能指望什么脚本做 - 当前例子被严重破坏,我不知道预期的输入/输出/动作是什么。

+0

我已更新我的问题。请看一下。谢谢。 –

+0

因为我的系统大部分使用sh文件,比如start.sh,stop.sh。所以我想用sh来方便。 –

+0

@RobustTran你很好,使用shell来调用awk,然后使用awk来完成文本处理。这就是两种工具都被设计来做的很好。 –