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)