bash 文本文件转置,添加新列,重新做一个大两列
bash text file transpose, add new column and make one big two-column again
我有一个很大的文本文件:
modularity_class;keys;columna1;columna2;columna3;
1;Antimalarial;Borneo;Cytotoxicity;Indonesia
0;Africa;malaria;morbidity;mortality
6;Anopheles albimanus;compression sprayer;house?spraying;;
12;;;;Tanzania;;
最终结果应该是:
Antimalarial;1
Borneo;1
Cytotoxicity;1
Indonesia;1
Africa;0
malaria;0
morbidity;0
mortality;0
Anopheles albimanus;6
compression sprayer;6
house?spraying;6
Tanzania;12
如您所见,我需要:
- 第一:删除第一行(应该是微不足道的)
- 转置每一行(一行一行)
- 将原始行中的第一个值添加到转置为第二列的每个元素
- 跳过分号分隔符之间的每个 null/blank 值
我读过 awk
、sed
、tr
等等……但我不知道如何以有效的方式获得它。
注意:每行可能有不同的长度或元素。
简单 awk
应该可以解决问题:
awk -F';' 'NR>1 {
for(i=2; i<=NF; i++) {
if($i!="")
print $i FS
}
}' file
一行:
awk -F';' 'NR>1 { for(i=2; i<=NF; i++) { if($i!="") print $i FS } }' file
我有一个很大的文本文件:
modularity_class;keys;columna1;columna2;columna3;
1;Antimalarial;Borneo;Cytotoxicity;Indonesia
0;Africa;malaria;morbidity;mortality
6;Anopheles albimanus;compression sprayer;house?spraying;;
12;;;;Tanzania;;
最终结果应该是:
Antimalarial;1
Borneo;1
Cytotoxicity;1
Indonesia;1
Africa;0
malaria;0
morbidity;0
mortality;0
Anopheles albimanus;6
compression sprayer;6
house?spraying;6
Tanzania;12
如您所见,我需要:
- 第一:删除第一行(应该是微不足道的)
- 转置每一行(一行一行)
- 将原始行中的第一个值添加到转置为第二列的每个元素
- 跳过分号分隔符之间的每个 null/blank 值
我读过 awk
、sed
、tr
等等……但我不知道如何以有效的方式获得它。
注意:每行可能有不同的长度或元素。
简单 awk
应该可以解决问题:
awk -F';' 'NR>1 {
for(i=2; i<=NF; i++) {
if($i!="")
print $i FS
}
}' file
一行:
awk -F';' 'NR>1 { for(i=2; i<=NF; i++) { if($i!="") print $i FS } }' file