围绕文件中的每一行包装if语句

时间:2014-03-17 13:26:08

标签: bash sed awk

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

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)来完成?

4 个答案:

答案 0 :(得分:5)

#!/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

答案 1 :(得分: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

答案 2 :(得分:0)

sed 's/copy \(.*\) to.*/if \1 != ""\
    &\
endif/' YourFile

假设你的文件是相同的模式(这个......和UNB ....是相同的格式而不仅仅是取代传统名称的样本)

答案 3 :(得分:0)

sed中的一行:

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

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