AWK迭代2次?e、 g.1,1,2,2,3,3
更新:添加更多数据以澄清问题 我有一个我认为非常基本的问题,我正在努力寻找答案 我根据特定列中的值打印一行一定次数。下面是一个示例文件(测试): 我正在添加其他列和信息,并根据第3列的值打印每行多次:AWK迭代2次?e、 g.1,1,2,2,3,3,awk,Awk,更新:添加更多数据以澄清问题 我有一个我认为非常基本的问题,我正在努力寻找答案 我根据特定列中的值打印一行一定次数。下面是一个示例文件(测试): 我正在添加其他列和信息,并根据第3列的值打印每行多次: awk '{for(i=1;i<=$3;i++)print $1,$2,"Bj"i,"??????"}' OFS="\t" testt 10104 Baja Bj1 ?????? 10104 Baja Bj2 ?????? 1021 Baja Bj1 ???
awk '{for(i=1;i<=$3;i++)print $1,$2,"Bj"i,"??????"}' OFS="\t" testt
10104 Baja Bj1 ??????
10104 Baja Bj2 ??????
1021 Baja Bj1 ??????
1021 Baja Bj2 ??????
1021 Baja Bj3 ??????
1021 Baja Bj4 ??????
10268 Baja Bj1 ??????
10268 Baja Bj2 ??????
10459 Baja Bj1 ??????
10459 Baja Bj2 ??????
1053 Baja Bj1 ??????
1053 Baja Bj2 ??????
1053 Baja Bj3 ??????
1053 Baja Bj4 ??????
222 Baja Bj1 ??????
222 Baja Bj2 ??????
222 Baja Bj3 ??????
222 Baja Bj4 ??????
222 Baja Bj5 ??????
222 Baja Bj6 ??????`
实际上(真实数据)第3列中的数字都是偶数,因此迭代器总是能够按2分组
有什么建议吗 这就是你想要做的吗
$ awk -v OFS='\t' '{ j=1; for(i=1;i<=$3;i++) {print $1,$2,"Bj"j,"??????"; if (!(i%2)) j++} }' file
10104 Baja Bj1 ??????
10104 Baja Bj1 ??????
1021 Baja Bj1 ??????
1021 Baja Bj1 ??????
1021 Baja Bj2 ??????
1021 Baja Bj2 ??????
10268 Baja Bj1 ??????
10268 Baja Bj1 ??????
10459 Baja Bj1 ??????
10459 Baja Bj1 ??????
1053 Baja Bj1 ??????
1053 Baja Bj1 ??????
1053 Baja Bj2 ??????
1053 Baja Bj2 ??????
$awk-vofs='\t'{j=1;对于(i=1;i我只会使用一个内部循环
awk '{
for (i=1; i <= $3/2; i++)
for (j=1; j<=2; j++)
print $1,$2,"Bj"i,"??????"
}' OFS="\t" testt
awk'{
对于(i=1;i另一个awk
,使用while
循环代替
$ awk -v OFS='\t' '{k=1; while(k++<=$3) print $1,$2,"Bj"int(k/2),"??????"}' file
10104 Baja Bj1 ??????
10104 Baja Bj1 ??????
1021 Baja Bj1 ??????
1021 Baja Bj1 ??????
1021 Baja Bj2 ??????
1021 Baja Bj2 ??????
10268 Baja Bj1 ??????
10268 Baja Bj1 ??????
10459 Baja Bj1 ??????
10459 Baja Bj1 ??????
1053 Baja Bj1 ??????
1053 Baja Bj1 ??????
1053 Baja Bj2 ??????
1053 Baja Bj2 ??????
222 Baja Bj1 ??????
222 Baja Bj1 ??????
222 Baja Bj2 ??????
222 Baja Bj2 ??????
222 Baja Bj3 ??????
222 Baja Bj3 ??????
$awk-vofs='\t'{k=1;而(k++我不明白预期输出中迭代器的概念。请更具体一些。对不起,只是更新了帖子,希望更清晰。下面的答案似乎就是我想要的。是的,我想是的。只是更新了帖子,使其更清晰。%
是大多数编程语言中的首选。I%2
在我不清楚时是非零的可以被2整除,当它是时为零。所以!(i%2)
每次i
是2的倍数时都是真的(即非零)。请尝试echo 3 | awk'{打印$0,$0/2,$0%2,!($0%2)}“
用于各种数字。可以写得更隐秘些j+=i%2
是的,但是除了不太清晰之外,它不能扩展到2以外的值。我们可以使它j+=(i%2?1:0)
我想(或者不管正确的逻辑是什么!),但我觉得我们正在进入一个神秘的领域。
awk '{
for (i=1; i <= $3/2; i++)
for (j=1; j<=2; j++)
print $1,$2,"Bj"i,"??????"
}' OFS="\t" testt
$ awk -v OFS='\t' '{k=1; while(k++<=$3) print $1,$2,"Bj"int(k/2),"??????"}' file
10104 Baja Bj1 ??????
10104 Baja Bj1 ??????
1021 Baja Bj1 ??????
1021 Baja Bj1 ??????
1021 Baja Bj2 ??????
1021 Baja Bj2 ??????
10268 Baja Bj1 ??????
10268 Baja Bj1 ??????
10459 Baja Bj1 ??????
10459 Baja Bj1 ??????
1053 Baja Bj1 ??????
1053 Baja Bj1 ??????
1053 Baja Bj2 ??????
1053 Baja Bj2 ??????
222 Baja Bj1 ??????
222 Baja Bj1 ??????
222 Baja Bj2 ??????
222 Baja Bj2 ??????
222 Baja Bj3 ??????
222 Baja Bj3 ??????