我有 50 组文件,包含 9 列(示例如附图所示)。
这些文件被命名为 (1) inputfile_1.assoc.logistic (2) inputfile_2.assoc.logistic 等…。
所有 50 个文件中第 1、2 和 3 列中的值均相同
我希望能够从所有 50 个文件中 grep 列 7,8 和 9 并添加到单个 .txt 文件中,如下所示(字段以制表符分隔,列 7,8 和 9 标记为如图所示)
我一直在使用 grep 循环(如下所示)单独提取列,另存为文本文件,将 .txt 文件导入到 stata 中以合并它们,但这需要相当长的时间(因为我有超过 700 万行),我需要对此进行了多次分析。
for i in $(seq 1 50); do
gawk -F" " '{print $2, $7, $8, $9}' inputfile_${i}.assoc.logistic >>/mnt/jw01-aruk-home01/projects/jia_mtx_gwas_2016/common_files/output/imputed_dataset/all_50_mi_datasets/acr30R_vs_acr30NR_combined_coefficients/outputfile_${i}.txt
done
这可以变得更有效并合并到 shell 循环中吗?
答案1
由于缺乏输入数据而未经测试:
gawk '
BEGIN {FS = OFS = "\t"}
BEGINFILE {match(FILENAME, /inputfile_([0-9]+).assoc.logistic/, m)}
FNR == 1 {
key = $1 OFS $2 OFS $3
data[key] = data[key] OFS $7"_"m[1] OFS $8"_"m[1] OFS $9"_"m[1]
next
}
{
key = $1 OFS $2 OFS $3
data[key] = data[key] OFS $7 OFS $8 OFS $9
}
END {
for (key in data) {
print key data[key]
}
}
' inputfile_*.assoc.logistic > outputfile
由于我正在迭代哈希键来输出数据,因此输出将以随机顺序出现