如果大于或小于?,如何替换写为字符串的浮点数?

时间:2015-07-16 20:59:45

标签: regex vim awk scripting

我有一个用文本格式写的图像,我需要设置接近黑色到黑色的像素和接近白色的像素。

该文件使用ʜꜱʟ colour space,如下所示:

0,0: (19.2529%,100%,22.7451%)  #31FF3A  hsl(19.2529%,100%,22.7451%)
1,0: (18.5185%,98.1818%,21.5686%)  #2FFA37  hsl(18.5185%,98.1818%,21.5686%)
2,0: (18.4524%,90.3226%,24.3137%)  #2FE63E  hsl(18.4524%,90.3226%,24.3137%)
3,0: (18.661%,100%,22.9412%)  #30FF3B  hsl(18.661%,100%,22.9412%)
4,0: (18.9891%,100%,23.9216%)  #30FF3D  hsl(18.9891%,100%,23.9216%)
5,0: (18.9076%,100%,23.3333%)  #30FF3C  hsl(18.9076%,100%,23.3333%)
6,0: (18.7107%,86.8852%,23.9216%)  #30DE3D  hsl(18.7107%,86.8852%,23.9216%)
7,0: (18.6275%,92.7273%,21.5686%)  #30EC37  hsl(18.6275%,92.7273%,21.5686%)
8,0: (19.2192%,100%,21.7647%)  #31FF38  hsl(19.2192%,100%,21.7647%)
9,0: (19.2529%,100%,22.7451%)  #31FF3A  hsl(19.2529%,100%,22.7451%)
10,0: (19.1667%,100%,23.5294%)  #31FF3C  hsl(19.1667%,100%,23.5294%)
11,0: (19.209%,96.7213%,23.9216%)  #31F73D  hsl(19.209%,96.7213%,23.9216%)
12,0: (18.7302%,84%,24.5098%)  #30D63F  hsl(18.7302%,84%,24.5098%)
13,0: (18.6275%,85%,23.5294%)  #30D93C  hsl(18.6275%,85%,23.5294%)
14,0: (18.6728%,93.1034%,22.7451%)  #30ED3A  hsl(18.6728%,93.1034%,22.7451%)
15,0: (18.7316%,100%,22.1569%)  #30FF39  hsl(18.7316%,100%,22.1569%)
16,0: (18.5841%,100%,22.1569%)  #2FFF39  hsl(18.5841%,100%,22.1569%)
17,0: (18.6186%,100%,21.7647%)  #2FFF38  hsl(18.6186%,100%,21.7647%)
18,0: (18.6186%,100%,21.7647%)  #2FFF38  hsl(18.6186%,100%,21.7647%)
19,0: (18.5841%,100%,22.1569%)  #2FFF39  hsl(18.5841%,100%,22.1569%)
20,0: (18.5345%,100%,22.7451%)  #2FFF3A  hsl(18.5345%,100%,22.7451%)
21,0: (18.5345%,96.6667%,23.5294%)  #2FF73C  hsl(18.5345%,96.6667%,23.5294%)
22,0: (18.5345%,98.3051%,23.1373%)  #2FFB3B  hsl(18.5345%,98.3051%,23.1373%)
23,0: (18.5507%,100%,22.549%)  #2FFF3A  hsl(18.5507%,100%,22.549%)
24,0: (18.5507%,100%,22.549%)  #2FFF3A  hsl(18.5507%,100%,22.549%)
25,0: (18.5345%,98.3051%,23.1373%)  #2FFB3B  hsl(18.5345%,98.3051%,23.1373%)
26,0: (18.5345%,98.3051%,23.1373%)  #2FFB3B  hsl(18.5345%,98.3051%,23.1373%)
27,0: (18.5345%,100%,22.7451%)  #2FFF3A  hsl(18.5345%,100%,22.7451%)
28,0: (18.5673%,100%,22.3529%)  #2FFF39  hsl(18.5673%,100%,22.3529%)
29,0: (18.5841%,100%,22.1569%)  #2FFF39  hsl(18.5841%,100%,22.1569%)
30,0: (18.5673%,100%,22.3529%)  #2FFF39  hsl(18.5673%,100%,22.3529%)
31,0: (18.5507%,100%,22.549%)  #2FFF3A  hsl(18.5507%,100%,22.549%)
32,0: (18.8218%,100%,22.7451%)  #30FF3A  hsl(18.8218%,100%,22.7451%)
33,0: (18.7316%,100%,22.1569%)  #30FF39  hsl(18.7316%,100%,22.1569%)
34,0: (18.7302%,84%,24.5098%)  #30D63F  hsl(18.7302%,84%,24.5098%)
35,0: (18.5824%,60%,28.4314%)  #2F9949  hsl(18.5824%,60%,28.4314%)

那么我(例如)如何替换上面的值(除了前2个数字(x,x:),它们给出像素坐标) by { {1}}使用vim或awkor使用其他脚本工具?

我正在考虑使用ʜꜱʟ值的light / last部分来确定是否需要替换(除了(0%,0%,0%) #000000 hsl(0%,0%,0%)这一行,但我不知道该如何做此

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

awk '
    BEGIN {
        black="(0%,0%,0%)  #000000  hsl(0%,0%,0%)"
        white="(0%,0%,100%)  #FFFFFF  hsl(0%,0%,100%)"
    }
    {
        line=$0
        coords=$1
        FS=","
        $0=$0
        match($4, "%")
        sub("%.*", "", $4)
        if ($4 < 25)
            printf("%s %s\n", coords, black)
        else if ($4 > 75)
            printf("%s %s\n", coords, white)
        else print line
        FS=" "
    }
' <img.txt