我希望我选择正确的头衔。我不是程序员,我还需要学习这个领域的术语。
我的问题是我必须在/ find / {}条件中插入包含一些记录的新行。
以下是示例输入:
1;2;3;4;
b;2;3;4;
txn;2;3;4;
a;2;3;4;
;;;;
b;2;3;4;
b;2;5;4;
b;2;3;4;
;;;;
c;2;3;4;
;;;;
在这里你看到我使用/ txn / {}的原因 - 原始输入有许多我不想在我感兴趣的部分之前打印的行。只有在“txn”第一次出现之后的行。< / p>
如果$ 1 = b且$ 3 = 5,我想插入两个新行。 此外,我需要打印$ 0加上一个新字段,例如。第一个新生产线5美元,打印0美元,新领域打印到6美元。 (最后应该跳过空行。)
结果将是
a 2 3 4
b 2 3 4
b 2 5 4
2 5 4 6
2 5 4 7
b 2 3 4
c 2 3 4
我的首发片段
BEGIN { OFS=FS=";"}
/^txn/,/^$/ {
###### tries to insert line ######
# eg. if ($1=="b") "\n" ;
##################################
print $1 FS "custom text" FS $3 FS "custom text" FS $5 $6 }
我能管理自己的最佳方法是:
if ($1=="b" && $3=="5") {print; print $1 FS "custom text" FS $3 FS "custom text" FS $5 $6 ;next}1}
这会插入一行,但不会打印其他行。
我通过搜索找到的其他代码片段,我只是部分了解但是neverthelesse对我不起作用的是:
###### tries to insert line ######
last~/b/" && $3=="3" {print "6\n7 "} {last=$1} 1
$1~/b/ {p=1} p && $3=="3"{print "6"; print "7"; p=0} 1'
/txn/ { $0 = $0 RS "6" RS "7"};
for $1'/b/ {$0 = $0 RS "6" RS "8"};
print nl $0; nl="\n"
if ($1~/b/) print $3 FS "works INSERTED LINE", "\n" ;
答案 0 :(得分:1)
您可以尝试这样的事情,
awk 'BEGIN{FS=";";OFS="\t"}
f && $1!=""{$1=$1; print}
$1=="b" && $3==5 && f{$1="";$5=6; print; $5=""; $6=7; print}
$1=="txn"{f=1}' file
你明白了,
a 2 3 4 b 2 3 4 b 2 5 4 2 5 4 6 2 5 4 7 b 2 3 4 c 2 3 4