nst*_*tam 1 awk text-processing
我有一个数据文件A.tsv
(字段分隔符 = \t
):
id clade mutation
243 40A SDF
254 20B
261 40A
267 20B
Run Code Online (Sandbox Code Playgroud)
B.tsv
(字段分隔符 = \t
):
id clade mutation
243 40A
254 20B
261 40A
267 20B SLT
Run Code Online (Sandbox Code Playgroud)
C.tsv
(字段分隔符 = \t
):
id clade mutation
243 40A
254 20B
261 40A MGG
267 20B
Run Code Online (Sandbox Code Playgroud)
我想将所有文件连接成一个,知道所有文件之间唯一不同的列是 column mutation
。预期的结果是:
id clade mutation
243 40A SDF
254 20B
261 40A MGG
267 20B SLT
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试过:
awk 'BEGIN{FS=OFS="\t"} NR==FNR{klos[NR]=$3; next} $3==""{$3=klos[FNR]} 1' *.tsv > output.tsv
Run Code Online (Sandbox Code Playgroud)
但它没有用。你有办法做到这一点吗?谢谢
PS:这是一个示例测试,在我的实际情况下,我有 3 个以上的文件。但是像示例一样,mutation
列中没有两个具有相同内容的文件。
在每个 Unix 机器上的任何 shell 中使用任何 awk:
$ cat tst.awk
BEGIN { FS=OFS="\t" }
(NR == FNR) || ($3 != "") {
fnr2rec[FNR] = $0
}
FILENAME == ARGV[ARGC-1] {
print fnr2rec[FNR]
}
Run Code Online (Sandbox Code Playgroud)
$ awk -f tst.awk A.tsv B.tsv C.tsv
id clade mutation
243 40A SDF
254 20B
261 40A MGG
267 20B SLT
Run Code Online (Sandbox Code Playgroud)