在两个包含空行的文件中查找公共行

时间:2017-10-05 03:20:55

标签: bash comm

我有两个几乎相同的文件,相同数量的行,这是一个代码。 我正在尝试创建这两个文件之间的公共行的文件,并且还有空行,其中行不同。 我尝试使用comm,它运行良好,但没有提供我在坏线上需要的空白行,它只是消除了行,公共文件更短(行数)。

这就是我的尝试:

comm -1 -2 file1 file2

1 个答案:

答案 0 :(得分:1)

char line[80]; int i = 0; *antal_varor = 0; while(fgets(line, sizeof(line), ange_filnamn) != NULL) { if(strncmp(line, "varor ", 6) == 0) { sscanf(line, "varor %d:", &i); if(i >= MAX) { fprintf(stderr, "warning: index in file too large\n"); i = 0; continue; } if(i + 1 > *antal_varor) *antal_varor = i + 1; } else if(strncmp(line, " itemnumber:", 12) == 0) { sscanf(line, " itemnumber: %d", &varor[i].itemnumber); } else if(strncmp(line, " name:", 6) == 0) { sscanf(line, " name: %s", varor[i].name); } else if(strncmp(line, " balance:", 9) == 0) { sscanf(line, " balance: %d", &varor[i].balance); } else { fprintf(stderr, "warning: unrecognized line in file\n"); } } printf("\nNumber of items: %d \n",*antal_varor); fclose(ange_filnamn); 需要排序的文件。所以,你可以使用这样的命令替换:

comm

如果你想跳过空行(空格),那么:

comm -12 <(sort file1) <(sort file2)

要跳过包含空格或制表符的空行:

comm -12 <(grep -Ev '^[ ]+$' file1 | sort) <(grep -Ev '^[ ]+$' file2 | sort)