我有一个这样的文件:
// question: 0 name: Switch category to $cat1$/Pretest Durchführung MIT 04//05/IKT_1_PT/IKT_1_PT_2_MIT05
$CATEGORY: $cat1$/Pretest Durchführung MIT 04//05/IKT_1_PT/IKT_1_PT_2_MIT05
// question: 164887 name: PT_IKT_1_01_ FTP
::PT_IKT_1_01_ FTP::Wozu dient das FTP Protokoll?{
~%-100%Blah1
~%-100%Blah2
=Blah3
~%-100%Blhah4.
}
// question: 164888 name: PT_IKT_1_02_Verteilte_Systeme
::PT_IKT_1_02_Verteilte_Systeme::Question2?{
~%-100%A1
~%-100%A2
=A3
~%-100%A4
}
// question: 164893 name: PT_IKT_1_07_Rational_Unified_Process
::PT_IKT_1_07_Rational_Unified_Process::Question3?{
~%-50%A1
~%-50%A2
~%50%A3
~%50%A4
}
如何使用AWK创建这样的输出?
PT_IKT_1_01_ FTP;Wozu dient das FTP Protokoll?;Blah1;F;Blah2;F;Blah3;T;Blhah4.;F
PT_IKT_1_02_Verteilte_Systeme;Question2?;A1;F;A2;F;A3;T;A4;F
PT_IKT_1_07_Rational_Unified_Process;Question3?;A1;F;A2;F;A3;T;A4;T
所以 - 在答案文本前面表示错误的答案,并且=表示答案是真的。但是,有些行只有一个答案是真的,在这种情况下,没有数字表明有多少答案是真的或者是假的。
的GIFT文件格式规范的子集答案 0 :(得分:1)
你可以这样做:
awk -v RS="" -F"\n" '$2~/^::/ {sub(/::/,"",$2);sub(/::/,";",$2);sub(/{/,"",$2);for(i=3;i<=6;i++) {n=split($i,a,"[%=]");m=m";"a[n]";"(i==5?"T":"F")};print $2 m;m=""}' file
PT_IKT_1_01_ FTP;Wozu dient das FTP Protokoll?;Blah1;F;Blah2;F;Blah3;T;Blhah4.;F
PT_IKT_1_02_Verteilte_Systeme;Question2?;A1;F;A2;F;A3;T;A4;F
PT_IKT_1_07_Rational_Unified_Process;Question3?;A1;F;A2;F;A3;T;A4;F
PS,我不确定你是如何得到那些F
和T
的。我确实假设F;F;T;F
,但您有一个F;F;T;T
更具可读性:
awk -v RS="" -F"\n" '
$2~/^::/ {
sub(/::/,"",$2)
sub(/::/,";",$2)
sub(/{/,"",$2)
for(i=3;i<=6;i++) {
n=split($i,a,"[%=]")
m=m";"a[n]";"(i==5?"T":"F")}
print $2 m;m=""
}
' file