awk - 增加块数据集中的特定列值并循环多次
问题描述
我正在尝试按上述顺序生成一个巨大的数据集。
4 0 1 642 643
4 642 643 1283 12
4 1283 1284 1924 1925
4 1924 1925 2565 2566
4 2565 2566 3206 3207
4 3206 3207 3847 3848
4 3847 3848 4488 4489
4 4488 4489 5129 5130
4 1 2 643 644
4 643 644 1284 1285
4 1284 1285 1925 1926
4 1925 1926 2566 2567
4 2566 2567 3207 3208
4 3207 3208 3848 3849
4 3848 3849 4489 4490
4 4489 4490 5130 5131
4 2 3 644 645
4 644 645 1285 1286
4 1285 1286 1926 1927
4 1926 1927 2567 2568
4 2567 2568 3208 3209
4 3208 3209 3849 3850
4 3849 3850 4490 4491
4 4490 4491 5131 5132
描述:有 5 列,第一列有一个常数“4”。一个块中有 8 行(数据以空行分隔)。
现在,我的想法是将前一个块(从第 1-8 行开始)复制到第 10-17 行,并将第 2-5 列中的数字加一。这个过程(现在必须复制第 10-17 行并粘贴到第 19-27 行,第 2 -5 列必须增加 1)必须迭代大约 640 次才能生成我需要的集合。
谁能建议我如何生成这种类型的数据集?
解决方案
$ cat tst.awk
{
for (fldNr=1; fldNr<=NF; fldNr++) {
flds[NR,fldNr] = $fldNr
}
}
END {
maxRecs = 3
for (recNr=1; recNr<=maxRecs; recNr++) {
for (lineNr=1; lineNr<=NR; lineNr++) {
printf "%s", flds[lineNr,1]
for (fldNr=2; fldNr<=NF; fldNr++) {
printf " %s", flds[lineNr,fldNr]+(recNr-1)
}
print ""
}
print ""
}
}
.
$ cat file
4 0 1 642 643
4 642 643 1283 12
4 1283 1284 1924 1925
4 1924 1925 2565 2566
4 2565 2566 3206 3207
4 3206 3207 3847 3848
4 3847 3848 4488 4489
4 4488 4489 5129 5130
.
$ awk -f tst.awk file
4 0 1 642 643
4 642 643 1283 12
4 1283 1284 1924 1925
4 1924 1925 2565 2566
4 2565 2566 3206 3207
4 3206 3207 3847 3848
4 3847 3848 4488 4489
4 4488 4489 5129 5130
4 1 2 643 644
4 643 644 1284 13
4 1284 1285 1925 1926
4 1925 1926 2566 2567
4 2566 2567 3207 3208
4 3207 3208 3848 3849
4 3848 3849 4489 4490
4 4489 4490 5130 5131
4 2 3 644 645
4 644 645 1285 14
4 1285 1286 1926 1927
4 1926 1927 2567 2568
4 2567 2568 3208 3209
4 3208 3209 3849 3850
4 3849 3850 4490 4491
4 4490 4491 5131 5132
只需更改maxRecs=3
为maxRecs=640
您喜欢的任何值即可。
推荐阅读
- mongodb - 将数组对象转换为简单数组 mongodb 聚合
- python - 如何从子字符串中获取列表中的索引值?
- javascript - 如何从 .js 文件中的 Javascript 函数调用 .cs 文件中的 C# 方法
- python - 如何从元组列表创建表?
- xna - 如何在 MonoGame 上使用 DrawUserPrimitive 启用抗锯齿
- reactjs - ReactJS 路由总是去服务器
- json - Swift - JSON解码返回空数组
- networking - 如何进行从主机(Mac)到在 VirtualBox 上运行的虚拟机(Linux)的端口转发?
- c# - 为什么对话计数器的值是 436 而不是 0,1,2,3,4,5....点击添加时?
- windows - 写输出 -InputObject (,'Test') -NoEnumerate