Shell - 如何在第7次冒号(:)后从记录中删除字符串“EES”

时间:2017-10-03 14:01:05

标签: shell awk sed

我们如何从输入文件下面删除EES

{"last_name":"Kiran","first_name":"kumar","sno":"1234","effe‌​ctive_date":"11/01/2‌​011","cancel_date":"‌​12/31/9999","alt_ein‌​_id_indicator":"Y","‌​alt_ein_id_employer_‌​number":"V3EES"} 

转换后期望文件看起来像这样

{"last_name":"Kiran","first_name":"kumar","sno":"1234","effe‌​ctive_date":"11/01/2‌​011","cancel_date":"‌​12/31/9999","alt_ein‌​_id_indicator":"Y","‌​alt_ein_id_employer_‌​number":"V3"}

TIA

2 个答案:

答案 0 :(得分:1)

使用解析JSON数据

jq -c '.alt_ein_id_employer_number |= sub("EES";"")' file.json
{"last_name":"Kiran","first_name":"kumar","sno":"1234","effective_date":"11/01/2011","cancel_date":"12/31/9999","alt_ein_id_indicator":"Y","alt_ein_id_employer_number":"V3"}

答案 1 :(得分:0)

以下awk应该从第8个字段或第7个冒号后删除EES字符串。

awk -F':' '{sub("EES","",$8)} 1' OFS=":"   Input_file

将很快添加详细说明。

<强>解释

awk -F&#39;:&#39; 表示我在这里设置字段分隔符,默认情况下在awk字段分隔符中的值是空格所以我现在进入冒号。所以它只会破坏与冒号相关的部分线条。

{sub(&#34; EES&#34;,&#34;&#34;,$ 8)} 意味着,我正在使用awk的替代工具,它将适用于方法sub(regex_to_be_subsituted,new_value,current_line / variable)。所以在这里我给字符串EES替换为NULL(&#34;&#34;),$ 8表示该行的第8个字段(在第7个冒号后提到)。

1 表示,awk处理条件然后操作的方法,因此通过写1我使条件为TRUE并且没有提及任何动作,所以通过默认打印将会发生。

OFS =&#34;:&#34; 意味着,设置输出字段分隔符,默认情况下OFS将是空格,因此根据您的Input_file我正在设置它致:

Input_file 意味着,只需在此提及Input_file名称。

如果您想将输出保存到相同的Input_file中,那么以下内容可能对您有所帮助。

awk -F':' '{sub("EES","",$8)} 1' OFS=":"   Input_file > temp_file && mv temp_file Input_file