例如,我有以下数据:
Name Chrom Position
rs1 1 1234
rs2 1 1789
rs3 1 1289
1 1 1269
2 1 1897
我想找到第一列中不包含字符串“rs”的所有行,并替换为 rs'chrom''position'
。名称 1 看起来像 rs11269
。
它最终看起来像这样:
Name Chrom Position
rs1 1 1234
rs2 1 1789
rs3 1 1289
rs11269 1 1269
rs11897 1 1897
我知道我可以用 awk 做
awk '!/rs/{print $1}' file
它会在第一列中找到所有不包含字符串“rs”的行,但我现在如何进一步将其替换为我自己的从 chrom 和位置构建的 rs ID?我会使用 gsub 还是其他东西?这不一定是在 shell 命令中,但 Perl 也是可以使用的另一种选择。感谢您的帮助。
最佳答案
你可以使用这个命令:
$ awk 'BEGIN{FS=OFS="\t"}NR>1&&!($1~/rs/){$1="rs"$2$3}1' file
Name Chrom Position
rs1 1 1234
rs2 1 1789
rs3 1 1289
rs11269 1 1269
rs11897 1 1897
使用 BEGIN{FS=OFS="\t"}
我们将输入和输出字段分隔符设置为制表符,使用 NR>1&&!($1~/rs/)
我们过滤掉不是第一个(标题)并且在第一个字段中不包含字符串“rs”的行,并且使用 {$1="rs"$2$3}
我们将第一个字段的值更改为所需的值。最后的 1
是真实条件,因此所有行都被打印出来。
关于linux - 使用 linux 查找和替换制表符分隔文件中列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39858651/