如何从 Unix 中的文件中删除前两列具有相同值的行?

FED*_*ASO 9 awk text-processing

我有一个包含几列的文件。我想从此文件中删除第一列和第二列显示相同值的整行。

例如,我的文件如下:

Variant         rsid         chr     pos
1:10177_A_AC    rs367896724     1    10177
1:10352_T_TA    rs201106462     1    10352
1:10511_G_A     rs534229142     1    10511
1:10616_CCGCCGTTGCAAAGGCGCGCCG_C        1:10616_CCGCCGTTGCAAAGGCGCGCCG_C        1       10616
Run Code Online (Sandbox Code Playgroud)

我想删除Variant列的值等于rsid列的行,所以我想获得一个最终文件,如下所示:

Variant         rsid         chr     pos
1:10177_A_AC    rs367896724     1    10177
1:10352_T_TA    rs201106462     1    10352
1:10511_G_A     rs534229142     1    10511
Run Code Online (Sandbox Code Playgroud)

我尝试运行以下命令:

awk '$1==$2{sed -i} input.file > output.file

awk -F, '$1==$2' input.file > output.file
Run Code Online (Sandbox Code Playgroud)

但他们都没有工作。

我如何通过使用awk和/或来解决它sed

Arc*_*mar 20

你几乎成功了

awk '$1!=$2' input.file > output.file
Run Code Online (Sandbox Code Playgroud)

这将保持第一个和第二个字段不同的行(因此在相等时删除)。

  • -F,是错误的,因为,不是您的字段分隔符,并且以这种方式设置会使 awk 误解行内容
  • '$1==$2{sed -i} 既不是 awk 也不是 sed 函数


ter*_*don 12

您已经有了最好的通用答案,但在您的特定情况下,您也可以简单地选择第二个字段以 开头的所有行rs

$ awk '$2 ~ /^rs/' file
Variant         rsid         chr     pos
1:10177_A_AC    rs367896724     1    10177
1:10352_T_TA    rs201106462     1    10352
1:10511_G_A     rs534229142     1    10511
Run Code Online (Sandbox Code Playgroud)