在第一列和第二列之间添加一个新列,其值是从 1 到 5 的数字,根据需要重复以达到总行数
Add a new column between the first and second columns with values that are numbers from 1 to 5, repeated as needed to reach total line number
我有一个包含 2 列的 txt 文件,我想在两列之间添加一个新列,其值范围为 1 到 5,并根据需要重复多次以使行与其他列相同.我正在尝试使用 AWK,但我愿意接受其他建议
示例输入
A 100
A 200
A 300
A 400
A 500
B 1000
B 2000
B 3000
B 4000
B 5000
示例输出
A 1 100
A 2 200
A 3 300
A 4 400
A 5 500
B 1 1000
B 2 2000
B 3 3000
B 4 4000
B 5 5000
现在我正在尝试
awk 'BEGIN{FS=OFS="\t"}{for (i = 1; i <= 5; ++i) =++i OFS }1' $my_data
但显然是行不通的。
带模运算符%
:
awk '{print , (NR-1)%5+1, }' file
输出:
A 1 100
A 2 200
A 3 300
A 4 400
A 5 500
B 1 1000
B 2 2000
B 3 3000
B 4 4000
B 5 5000
参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
更简单的awk
:
awk '{print , ++cnt[], }' file
A 1 100
A 2 200
A 3 300
A 4 400
A 5 500
B 1 1000
B 2 2000
B 3 3000
B 4 4000
B 5 5000
awk '{print ,a[]+=1,}' file
我有一个包含 2 列的 txt 文件,我想在两列之间添加一个新列,其值范围为 1 到 5,并根据需要重复多次以使行与其他列相同.我正在尝试使用 AWK,但我愿意接受其他建议
示例输入
A 100
A 200
A 300
A 400
A 500
B 1000
B 2000
B 3000
B 4000
B 5000
示例输出
A 1 100
A 2 200
A 3 300
A 4 400
A 5 500
B 1 1000
B 2 2000
B 3 3000
B 4 4000
B 5 5000
现在我正在尝试
awk 'BEGIN{FS=OFS="\t"}{for (i = 1; i <= 5; ++i) =++i OFS }1' $my_data
但显然是行不通的。
带模运算符%
:
awk '{print , (NR-1)%5+1, }' file
输出:
A 1 100 A 2 200 A 3 300 A 4 400 A 5 500 B 1 1000 B 2 2000 B 3 3000 B 4 4000 B 5 5000
参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
更简单的awk
:
awk '{print , ++cnt[], }' file
A 1 100
A 2 200
A 3 300
A 4 400
A 5 500
B 1 1000
B 2 2000
B 3 3000
B 4 4000
B 5 5000
awk '{print ,a[]+=1,}' file