python - Linux 将长格式转换为宽格式

标签 python linux awk transpose

我希望使用 awk 语句或 Python 从长格式转置文件。

我的输入文件看起来像这样;

ID Chr_Position Geno
111 1_1234 0
111 1_12345 1
111 1_2345 0
111 2_23245 2

我需要的输出是(不一定需要标题)

ID 1_1234 1_12345 2_2345
111 0 1 0 2
112 1 1 1 1
113 1 1 0 2

它们是大文件,超过 100,000 个 ID,每个 ID 超过 10,000 行,但如果需要可以拆分成更小的文件。 我有以前的代码可以转置行和列,但不确定如何从长格式中获取它。

最佳答案

我知道如何根据您发布的输入文件生成您发布的输出,但也许这会帮助您走上正轨:

$ cat tst.awk
NR==1 { next }
$1 != prev { if (line!="") print prev line; line=""; prev=$1 }
{ line = line OFS $NF }
END { if (line!="") print prev line }

$ awk -f tst.awk file
111 0 1 0 2

关于python - Linux 将长格式转换为宽格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35730605/

相关文章:

linux - 在 rxvt-unicode (urxvt) 下选择 tmux 中的文本

unix - 如何在ksh中反转字符串

linux - 我可以使用 FreeBSD 内核制作操作系统吗?并仅构建与 Chromium-OS 相同的替代方案 HTML5

Python-将键值对添加到数组中的字典中

python - 如何在 Postgres 中使用 Plpython3 返回结果集

python - Pandas df.describe() ,是否可以在不转置的情况下按行进行?

java - 从 java 调用简单的 shell 脚本不起作用

linux - 将表转换为 2 列

regex - sed:删除第一个字母数字字符之前的所有字符

python - 缩写词和带连字符的单词的打印