以下是输入。
mConnectedThread = new ConnectedThread();
mConnectedThread.start();
我正在努力做出如下的最终结果。也就是说,想要删除空格,“{”和“}”字符并检查下一行是否为“>”或'<'。 实际上,重复上面的输入。我还需要解析'>'和'<'因此我将解析后的字符串(YES或NO)放入数据库。
!{ID=34, ID2=35}
>
!{ID=99, ID2=23}
>
!{ID=18, ID2=87}
<
所以,使用'sub'函数我认为我可以用空格替换空格,但结果显示:
1#YES#NO
你能告诉我什么是错的吗? 如果可能的话,教我如何删除'{'和'}'。 如果你能告诉我awk文件版本而不是单行文件,那就表示赞赏。ID=34,ID=35#YES#NO
ID=99,ID=23#YES#NO
ID=18,ID=87#NO#YES
答案 0 :(得分:4)
鉴于您的样本输入:
$ cat file
!{ID=34, ID2=35}
>
!{ID=99, ID2=23}
>
!{ID=18, ID2=87}
<
此脚本生成所需的输出:
BEGIN { FS="[}{=, ]+"; RS="!" }
NR > 1 { printf "ID=%d,ID=%d#%s\n", $3, $5, ($6==">"?"YES#NO":"NO#YES") }
字段分隔符设置为使用您感兴趣的行部分之间的空格和其他字符。记录分隔符设置为!
,以便将每对行视为单曲。
第一条记录为空(第一行的开头,直至第一行!
),因此我们只处理之后的记录。输出使用printf
构建,使用三元组来确定最后一部分(我假设只有两个选项,>
或<
)。
答案 1 :(得分:1)
假设你有这样的意见:
input.txt中
!{ID=34, ID2=35}
!{ID=36, ID2=37}
>
您可以使用以下awk命令
awk -F'[!{}, ]' 'NR>1{yn="NO";if($1==">")yn="YES";print l"#"yn}{l=$3","$5}' input.txt
产生这个输出:
ID=34,ID2=35#NO
ID=36,ID2=37#YES