awk指定行号和列号进行处理

这个做法是有问题的,会导致不应该有换行符的每一行都加上一个指定的换行符。待我再研究一下。

今天 在处理一堆SQL文件时遇到了这个问题。

首先是分隔符的问题,我遇到的两个分隔符一个是"`"(反引号)和"'"(单引号)。这两个都是奇葩。先在这里指出。

分别是

awk -F"'" 'BEGIN{OFS="'\''"}{....}' filename

awk -F"\`" 'BEGIN{OFS="`"}{...}' filename

注意单引号的情况是要在目标功能是转义的反斜杠的左右两边各加一个单引号。

然后就是主要问题了,我是要把一个sql文件的指定行和指定列的内容全部小写。awk是不支持sed -i那种inplace模式 的,只能替换。

注意:操作有风险,最好先备份。

awk -F"'" 'BEGIN{OFS="'\''"}{if (NR>=3 && NR<=20) {tmp=tolower($2); $2=tmp;}; print $0}' filename > tmpfile

这样还是把改变后的内容重定向到了指定文件,检查无误后再用这个文件覆盖原文件。

 

可能有些同学看不明白,为什么前面已经指定了-F也就是分隔符了,为什么还要指定OFS呢?这是因为在后面用了print $0,如果不指定,那么会默认使用awk内建的分隔符,也就是空格来输出,你就会惊奇的发现原来的"'"都变成了空格。

至于其他问题,应该可以很容易通过搜索找到答案了。

 

转载于:https://www.cnblogs.com/UnixAgain/p/4000699.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值