0

用于查找公共值并使用减法数学以范围模式写入特定模式的 Shell 脚本

用于获取两个文件中的命令值并将 ia 模式写入新文件的 Shell 脚本,并且还将范围模式的第一个值减去 1

$ cat file1
2
3
4
6
7
8
10
12
13
16
20
21
22
23
27
30

$ cat file2
2
3
4
8
10
12
13
16
20
21
22
23
27

有效的脚本:

awk 'NR==FNR{x[$1]=1} NR!=FNR && x[$1]' file1 file2 | sort | awk 'NR==1 {s=l=$1; next} $1!=l+1 {if(l == s) print l; else print s ":" l; s=$1} {l=$1} END {if(l == s) print l; else print s ":" l; s=$1}'

脚本输出:

2:4
8
10
12:13
16
20:23
27

Desired output:

1:4
8
10
11:13
16
19:23
27
4

2 回答 2

2

类似于 sputnick 的,除了comm用于查找文件内容的交集。

comm -12 <(sort file1) <(sort file2) | 
sort -n |
awk '
    function print_range() {
        if (start != prev) 
            printf "%d:", start-1
        print prev
    }
    FNR==1 {start=prev=$1; next} 
    $1 > prev+1 {print_range(); start=$1}
    {prev=$1}
    END {print_range()}
'
1:4
8
10
11:13
16
19:23
27
于 2013-07-08T20:21:35.570 回答
1

尝试这样做:

awk 'NR==FNR{x[$1]=1} NR!=FNR && x[$1]' file1 file2 |
    sort |
    awk 'NR==1 {s=l=$1; next}
        $1!=l+1 {if(l == s) print l; else print s -1  ":" l; s=$1}
        {l=$1}
        END {if(l == s) print l; else print s -1 ":" l; s=$1}'
于 2013-07-08T19:33:03.997 回答