用空格替换换行符,直到达到字符限制而不破坏文本

用空格替换换行符,直到达到字符限制而不破坏文本

我正在/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

相关内容