Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWK迭代2次?e、 g.1,1,2,2,3,3_Awk - Fatal编程技术网

AWK迭代2次?e、 g.1,1,2,2,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 ???

更新:添加更多数据以澄清问题

我有一个我认为非常基本的问题,我正在努力寻找答案

我根据特定列中的值打印一行一定次数。下面是一个示例文件(测试):

我正在添加其他列和信息,并根据第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 ??????
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     ??????