Bash
如何重複 B 變數的值直到 A 變數的數量完成
我有 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