我有一个177列和54248行的CSV文件,如下所示:
SNP_Name,Chr,Coordinate,R921B12,R921C12,R921D12,...
CL635944_160.1,0,0,CC,CC,CC,...
CR_594.1,0,0,TT,TT,TT,...
CR_816.1,0,0,CC,TT,TT,...
我需要一个制表符分隔的文件,其中包含54284列和177行,例如:
R921B12 C C T T C C ...
R921C12 C C T T T T ...
R921D12 C C T T T T ...
以下命令允许我转置一列(数字3)
awk '{ printf( "%s ", $3); } END { printf( "\n" ); }' a.csv
但是我该如何为所有人呢?
答案 0 :(得分:0)
一次扫描输入文件,对包含行号,字段号和字段数据内容的每一行和每个字段一行写入一个临时文件。按照书面规定,临时文件将按行中的字段排序。对临时文件进行排序,以便按字段中的行对其进行排序,然后扫描该临时文件,并按所需顺序重建输出。
答案 1 :(得分:0)
GNU datamash具有将执行此操作的转置操作。它还可以将字段定界符从逗号更改为TAB。这是一个示例(问题中显示了a.csv
。
$ cat a.csv
SNP_Name,Chr,Coordinate,R921B12,R921C12,R921D12
CL635944_160.1,0,0,CC,CC,CC
CR_594.1,0,0,TT,TT,TT
CR_816.1,0,0,CC,TT,TT
$ # datamash transpose (cut removes first three fields)
$ cut -d , -f 4- a.csv | datamash --field-separator=, --output-
delimiter=$'\t' transpose
R921B12 CC TT CC
R921C12 CC TT TT
R921D12 CC TT TT