gpt4 book ai didi

linux - 将特定行转为列

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:29 26 4
gpt4 key购买 nike

我有数百万行这样的行。我想编写简单的 bash 脚本来获取一些信息。

                            Name:                 1FJ
HA_RMSDs: -1000.0000
HA_RMSDh: -1000.0000
HA_RMSDm: 0.0000
Grid_Score: -24.958729
Grid_vdw_energy: -24.958729
Grid_es_energy: 0.000000
Internal_energy_repulsive: 5.894002
Name: ZINC103990867
HA_RMSDs: -1000.0000
HA_RMSDh: -1000.0000
HA_RMSDm: 0.0000
Grid_Score: -22.196136
Grid_vdw_energy: -17.917459
Grid_es_energy: -4.278677
Internal_energy_repulsive: 14.832469

我想变成这样;

Name            Grid_Score
ZINC103990867 -22.196136
1FJ -24.958729

我找到了一些 solution但我做不到。

如有任何帮助,我们将不胜感激。

最佳答案

当您在输入中有名称到值的映射时,通常最好先创建一个数组来保存这些映射,然后只按名称打印值:

$ cat tst.awk
{ sub(/:/,"") }

NR==1 { key=$1 }
$1==key { prt() }
{ f[$1] = $2 }
END { prt() }

function prt( i) {
if (NR==1) {
numCols = split(c,cols,/,/)
for (i=1; i<=numCols; i++) {
printf "%s%s", cols[i], (i<numCols?OFS:ORS)
}
}
else {
for (i=1; i<=numCols; i++) {
printf "%s%s", f[cols[i]], (i<numCols?OFS:ORS)
}
}
}

.

$ awk -v c='Name,Grid_Score' -f tst.awk file | column -t
Name Grid_Score
1FJ -24.958729
ZINC103990867 -22.196136

.

$ awk -v c='Name,Grid_Score,HA_RMSDs,Grid_es_energy' -f tst.awk file | column -t
Name Grid_Score HA_RMSDs Grid_es_energy
1FJ -24.958729 -1000.0000 0.000000
ZINC103990867 -22.196136 -1000.0000 -4.278677

关于linux - 将特定行转为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45683662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com