使用循环将字符串附加到行

使用循环将字符串附加到行

我有一个文件:

aaa
bbb
ccc

另一个:

111
222
333
444
.
.
999

附加后我想要的输出应该是:

aaa 111
bbb 222 
ccc 333 
aaa 444
bbb 555
ccc 666
.
.
.
aaa nnn

我可以使用 awk 和 sed 附加固定字符串,但我无法弄清楚使用不同字符串循环固定行数的方法。虽然第二个长文件作为文件存在,但要附加的字符串不必在文件中,但由于实际情况下有 11 行循环,我认为另一个文件是读取它们的正确方法。

答案1

使用 sed、bash、一个函数和两个全局变量(counter 和 f1)。

counter=1
getnext() {
  f1=$(sed -n "${counter}p" file1)
  if [[ "$f1" == "" ]]; then
    counter=1
    f1=$(sed -n "${counter}p" file1)
  fi
  ((counter++))
}

while read -r f2; do getnext; echo "$f1 $f2"; done <file2

输出:

AAA 111
222
ccc 333
444
555 号
ccc666
AAA 777
888
ccc 999

答案2

使用 awk 的解决方案。前置文件(即第一列)被加载到部分数组arrBEGIN-(stdin)可以用文件名替换。

第二个文件是正常的 awk 输入。

echo -e 'a\nb\nc'|
awk 'BEGIN {
        while ((getline < "-") > 0) {
                arr[i++] = $0
        }
}

{
        if (j in arr) {
                print arr[j++], $0
                next
        }
        j = 0
        print arr[j++], $0
}' <(echo {1..10}|tr ' ' '\n')

相关内容