【问题标题】:Wrapping an if statement around each line in the file在文件中的每一行周围包装一个 if 语句
【发布时间】:2014-03-17 22:01:05
【问题描述】:

我有一个包含下一行的文件:

copy THIS:0022 to UNB:0022;
copy THIS:0023 to UNB:0023;
copy THIS:0024 to UNB:0024;

我想处理每一行并围绕它创建一个 if 语句,例如:

if THIS:0022 != ""
    copy THIS:0022 to UNB:0022;
endif
if THIS:0023 != ""
    copy THIS:0023 to UNB:0023;
endif
if THIS:0024 != ""
    copy THIS:0024 to UNB:0024;
endif

如何使用 bash 和 awk(和/或 sed)来做到这一点?

【问题讨论】:

  • 您正在解析/发出什么语言?
  • 从 Seeburger 映射源代码

标签: bash sed awk


【解决方案1】:
#!/bin/bash

while read a b c d; do
    echo "if $b != \"\""
    echo "    $a $b $c $d"
    echo "endif"
done

将其放入foo.sh 并运行./foo.sh < infile

【讨论】:

    【解决方案2】:

    试试这个:

    awk '{print "if "$2" != \"\"\n    "$0"\nendif"}' file
    if THIS:0022 != ""
        copy THIS:0022 to UNB:0022;
    endif
    if THIS:0023 != ""
        copy THIS:0023 to UNB:0023;
    endif
    if THIS:0024 != ""
        copy THIS:0024 to UNB:0024;
    endif
    

    【讨论】:

      【解决方案3】:
      sed 's/copy \(.*\) to.*/if \1 != ""\
          &\
      endif/' YourFile
      

      假设您的文件采用相同的模式(THIS.... 和 UNB.... 的格式相同,而不仅仅是示例代替更传统的名称)

      【讨论】:

        【解决方案4】:

        sed 中的一行:

        sed -rne 's/(copy THIS:([0-9]{4}).*)/if THIS:\2 != "" \n  \0;\nendif;/p' copy.txt
        

        括号中存储的是原始匹配值。 \0 存储来自外部 () 的匹配,在这种情况下是整行 \2 存储来自内部 () 的匹配,即 'THIS:' 之后的数字

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-12
          • 1970-01-01
          • 1970-01-01
          • 2011-08-18
          • 1970-01-01
          • 2014-02-05
          • 2010-12-31
          • 2014-02-01
          相关资源
          最近更新 更多