如何重复B变量的值直到A变量的数量完成

如何重复B变量的值直到A变量的数量完成

我有包含 2 个变量值的 infile

# cat infile
A 1
B 2
C
D
E

我想读取变量 a 和 b,这样如果 $b 具有空值,它应该像 1..2 一样重复,直到读取所有 $a 值。

所以如果我使用一个循环echo $a $b

# cat loop.sh
#!/usr/bin/env bash

cat infile | while
  read a b
do
  echo $a $b
done

结果与 infile 有点相同。

但我想要一个应该重复 $b 的 if 语句,以便它应该回显

A 1
B 2
C 1
D 2
E 1

答案1

假设一旦第二列用完值,该列中将不再有值,

awk '{ if ($2 == "") $2 = saved[(i++)%n]; else saved[n++] = $2 }; 1' file

这会将第二列的值读入数组saved,索引0保存第一个值并n每次递增。当第二列用完值时,该数组用于以循环方式填充该列,用作i计数器并以n使用模运算符的倍数将其值折叠回零。

测试:

$ cat file
A 1
B 2
C
D
E
$ awk '{ if ($2 == "") $2 = saved[(i++)%n]; else saved[n++] = $2 }; 1' file
A 1
B 2
C 1
D 2
E 1
$ cat otherfile
A apple
B bumblebee
C sunshine
D
E
F
G
H
$ awk '{ if ($2 == "") $2 = saved[(i++)%n]; else saved[n++] = $2 }; 1' otherfile
A apple
B bumblebee
C sunshine
D apple
E bumblebee
F sunshine
G apple
H bumblebee

相关内容