linux:某列转为多行

现有文件test如下所示:

预期转换为如下所示:

如果是用R的话,可以通过以下命令实现:

library(dplyr)
co <-fread("test",sep="\t",header = F,check.names = F)
co1=co %>% as_tibble() %>% separate_rows(V6, sep = ",")

如果是bash的话,则可以通过以下命令实现:

#逐行读取test文件
while IFS= read -r line
do
need1=`echo "$line" | awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$5}'` #提取每行的第一列到第五列
need2=`echo "$line" | awk '{print $6}' | tr "," "\n"` #提取每行的第六列并转为多行
num=`echo "$need2" | wc | awk '{print $1}'` #统计need2变量共有多少行
need3=`for (( c=1; c<=num; c++)) ; do echo "$need1" ; done` #重复打印need1变量num次
echo "$need3" >> file1 
echo "$need2" >> file2
done < test

paste file1 file2 > file3 #合并
posted @ 2022-06-29 17:58  橙子牛奶糖  阅读(179)  评论(0编辑  收藏  举报