【问题标题】:How to write changes to file in awk END statement如何在 awk END 语句中将更改写入文件
【发布时间】: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


【解决方案1】:

看起来好像不需要 END 块。您只需要将输出重定向到 input.bak 等:

awk '{...}' filename > input.bak

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多