根据另一列中的值复制 CSV 文件中的行

根据另一列中的值复制 CSV 文件中的行

我有一个 800 多行的文件。每行都有一定数量的个体,我们必须测量其特征(n = 3、5 或 10)。我想扩展该文件,以便每个人根据我们需要测量的数字(n)拥有自己的行。
例如:

Row     Who/What        Description     n
8001    Maize line      Control         3

会成为:

Row     Who/What        Description     n
8001    Maize line      Control         3
8001    Maize line      Control         3
8001    Maize line      Control         3

我不精通 Unix(仍在学习!),但我知道我需要读取 txt/csv 文件,然后根据第四列中的 n 进行复制。我不需要重复列标题,这只是为了组织。有人可以帮我弄这个吗?

答案1

尝试使用awk

awk 'NR==1{ print; next } { repeat=$NF; while (repeat--) print } ' infile

您给定的示例文件不是 .csv 文件,应该以逗号分隔;您需要使用 awk 的-F选项指定输入文件中使用的分隔符。

awk -F, 'NR==1{ print; next } { repeat=$NF; while (repeat--) print } ' infile

回答评论中提出的问题:

awk 'NR==1{ print; next } { bakup=$1; repeat=$NF; 
            while (repeat--) { $1=bakup"."++dup; print }; dup=0 }' infile

相关内容