Bash

如何重複 B 變數的值直到 A 變數的數量完成

  • August 27, 2021

我有 2 個變數的值的 infile

# cat infile
A 1
B 2
C
D
E

我想讀取變數 a & b,這樣如果 $ b has null value, it should repeat like 1..2, till all $ 讀取值。

所以如果我使用一個循環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

假設一旦第二列的值用完,該列中將不再有值,

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

引用自:https://unix.stackexchange.com/questions/666466