如何删除字符串中的空格和特定字符 - awk

时间:2015-11-13 14:11:36

标签: awk

以下是输入。

                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

2 个答案:

答案 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