【发布时间】:2021-04-16 08:02:00
【问题描述】:
在我使用 awk 功能的地方,我用这个“bash”脚本替换了一些字符串。 我可以以某种方式将更改保存到 END 语句中的文件吗?或者这不是 awk 是怎么做的。或者您会建议使用 grep 和 sed 的组合吗?
#!/usr/bin/bash
FILENAME=$1
SUBSTRING=$2
echo $FILENAME
cat $FILENAME | awk '
BEGIN {
IGNORECASE=1
foundinput=0
};
{
if (foundinput={
if ($0 ~ /INPUT/){
start=match($0, /\/.*$/)
SUBTHIS=substr($0, start)
sub(SUBTHIS, "'$SUBSTRING'")
print($0)
}
}
}
{gsub(" ", "", $0)}
b=/BRAKEDISC/
{
if (b={
foundinput=1
};
}
END {
print $0 > "input.bak"
}
'
我会很感激任何建议。
干杯, 克里斯托弗
【问题讨论】:
-
您需要将这些行作为值添加到内存数组中,然后循环遍历数组并将这些行打印到 END 部分的文件中。此外,您不需要通过管道将 cat 传递到 awk,使用 awk '{...}' 文件名。似乎您可能只需要 awk '{...}' filename > input.bak 没有 END 部分。
-
请同时添加您的输入文件的一个小示例以及所需的结果
-
你好拉曼,这对我来说很好用!非常感谢。
-
你好 jas,很遗憾我不能用这个特定的文件来做这件事,如果有帮助的话,我可以在当天晚些时候准备一些虚拟文件?
-
if (foundinput={ ...应该做什么?是否有一些 awk 变体是有效的语法?
标签: bash awk substring substitution