![用空格替换换行符,直到达到字符限制而不破坏文本](https://linux22.com/image/208617/%E7%94%A8%E7%A9%BA%E6%A0%BC%E6%9B%BF%E6%8D%A2%E6%8D%A2%E8%A1%8C%E7%AC%A6%EF%BC%8C%E7%9B%B4%E5%88%B0%E8%BE%BE%E5%88%B0%E5%AD%97%E7%AC%A6%E9%99%90%E5%88%B6%E8%80%8C%E4%B8%8D%E7%A0%B4%E5%9D%8F%E6%96%87%E6%9C%AC.png)
我正在/etc/hosts
路由器上配置一个文件,并有一个包含超过 135,000 个域的列表,我需要通过此文件阻止这些域,该文件占用了近 5MB 的空间。事实证明,我的路由器上的可用 RAM 极其有限,因此 dnsmasq 无法将该文件加载到内存中而不崩溃。
目前,主机文件如下所示:
0.0.0.0 a.triggit.com
0.0.0.0 a.twiago.com
0.0.0.0 a.visualrevenue.com
0.0.0.0 a.websponsors.com
0.0.0.0 a.webwise.org
0.0.0.0 a15172379.alturo-server.de
0.0.0.0 a2.mediagra.com
0.0.0.0 a3.suntimes.com
0.0.0.0 a7cleaner.com
0.0.0.0 aa.agkn.com
0.0.0.0 aa.tweakers.nl
0.0.0.0 aaa-architecten.nl
0.0.0.0 aaa-arcobaleno.it
0.0.0.0 aads.treehugger.com
0.0.0.0 aan.amazon.com
0.0.0.0 aarth.net
0.0.0.0 aax-cpm.amazon-adsystem.com
0.0.0.0 aax-us-east.amazon-adsystem.com
0.0.0.0 aax-us-pdx.amazon-adsystem.com
0.0.0.0 aax.amazon-adsystem.com
0.0.0.0 ab.5.p2l.info
0.0.0.0 ab.tweakers.nl
0.0.0.0 ab913aa797e78b3.com
0.0.0.0 abclnks.com
0.0.0.0 abetterinternet.com
0.0.0.0 abi83-schramberg.de
0.0.0.0 aboardamusement.com
不过,我想把它改成这样:
0.0.0.0 a.triggit.com a.twiago.com a.visualrevenue.com a.websponsors.com a.webwise.org a15172379.alturo-server.de a2.mediagra.com a3.suntimes.com a7cleaner.com aa.agkn.com aa.tweakers.nl aaa-architecten.nl aaa-arcobaleno.it aads.treehugger.com
0.0.0.0 aan.amazon.com aarth.net aax-cpm.amazon-adsystem.com aax-us-east.amazon-adsystem.com aax-us-pdx.amazon-adsystem.com aax.amazon-adsystem.com ab.5.p2l.info ab.tweakers.nl ab913aa797e78b3.com abclnks.com abetterinternet.com abi83-schramberg.de
0.0.0.0 aboardamusement.com
这些行都不超过 256 个字符,并且原始 dos 列表中的每个域不会分成两部分(即,第 256 个字符不会带入新行)。
如何读取原始主机文件,并创建更长的单行表达式(最多 256 个字符),但不会“吃掉”一些结果(即打破 256 个字符限制之前的最后一个域)?
答案1
这可能就是您想要的,在每个 Unix 机器上的任何 shell 中使用任何 awk:
$ cat tst.awk
NR == 1 {
out = $1
}
{
prev = out
out = out OFS $2
if ( length(out) > 256 ) {
print prev
out = $0
}
}
END {
print out
}
$ awk -f tst.awk file
0.0.0.0 a.kerg.net a.libertystmedia.com a.ligatus.com a.ligatus.de a.mktw.net a.o333o.com a.phormlabs.com a.predictvideo.com a.prisacom.com a.rad.live.com a.rad.msn.com a.spolecznosci.net a.ss34.on9mail.com a.total-media.net a.tribalfusion.com
0.0.0.0 a.triggit.com a.twiago.com a.visualrevenue.com a.websponsors.com a.webwise.org a15172379.alturo-server.de a2.mediagra.com a3.suntimes.com a7cleaner.com aa.agkn.com aa.tweakers.nl aaa-architecten.nl aaa-arcobaleno.it aads.treehugger.com
0.0.0.0 aan.amazon.com aarth.net aax-cpm.amazon-adsystem.com aax-us-east.amazon-adsystem.com aax-us-pdx.amazon-adsystem.com aax.amazon-adsystem.com ab.5.p2l.info ab.tweakers.nl ab913aa797e78b3.com abclnks.com abetterinternet.com abi83-schramberg.de
0.0.0.0 aboardamusement.com