我有一个包含下一行的文件:
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)来完成?
答案 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:'之后的数字