如何按线打印两个变量



我正在寻找一种通过线上线打印的方法。

例如,我有以下变量A和B,其中包含:

| A | B | 
| a | d | 
| b | c | 
| c | b | 
| d | a | 

我想要的是输出:

a d
b c
c b
d a

我尝试了

awk 'BEGIN {OFS=" "}{
  getline line < "$A"
  print $0,line
} ' "$B"

但这不起作用。
A和B是多线字符串。例如,A是A* n b n c n d n*
请不要"列"或"粘贴"方法。

尝试使用此命令:

while read -u7 a && read -u8 b; do echo "[$a] [$b]"; done 7<<<"$A" 8<<<"$B" 

while read -u7 a && read -u8 b; do echo "[$a] [$b]"; done 
    7< <(echo "$A") 8< <(echo "$B") 

在这里read -u7 a表示从文件描述符7读取到a变量, 7<<<"$A"表示将$A的内容重定向到文件描述符7,7< <(echo "$A")表示将ECHO输出重定向到文件描述符7。

例如,如果我有A=$(seq 10 15); B=$(seq 20 25);,则结果是:

[10] [20]
[11] [21]
[12] [22]
[13] [23]
[14] [24]
[15] [25]

将每个字符串的元素加载到数组中,使成对处理变得更加容易。例如:

#!/bin/bash
#      ^- must be bash, not sh, for arrays to be a supported feature
IFS=$'n' read -r -d '' -a array_a <<<"$A"
IFS=$'n' read -r -d '' -a array_b <<<"$B"
for idx in "${!array_a[@]}"; do
  printf '%st|%sn' "${array_a[$idx]}" "${array_b[$idx]}"
done

我认为您不想使用paste的原因是您要进一步处理值对。

如果在 shell 代码中进行此操作足够,请考虑TIVN的有用答案或Charles Duffy的有用答案。

如果您确实想使用awk进行进一步处理,例如在解决方案尝试中,请考虑 pasteawk组合:

#!/usr/bin/env bash
# Sample input
A=$'anbncnd'
B=$'dncnbna'
paste <(echo "$A") <(echo "$B") | awk '{ print "Pair #" NR ": ", $1, $2 }'
  • paste <(echo "$A") <(echo "$B")合并了两个输入变量的相应线,由 t实例分隔的原点行。
  • awk的默认字段拆分然后将相应的值作为字段$1$2用于每个输入行。

至于为什么您的awk命令不起作用

awk 'BEGIN {OFS=" "}{
  getline line < "$A"
  print $0,line
} ' "$B"
  • 您的 awk脚本是单引号,但看起来您正在尝试引用 shell ach $A ince ince

    • 由于外壳没有解释单引号的字符串,因此awk将解释$A,这不是意图;
      通常,尽管使用单引号的字符串是良好的练习,以避免在壳体提前扩展和awk看到的东西之间混淆;使用-v varName=varValue选项将Shell变量值传递给awk
    • awk然后解释 $A _field( $),其中存储在 awk awk actible A中的索引 - 由于未定义变量A,这要么等于$0,要么等于当前输入线(GNU awk,gnu awk,,gnu awk,awuk awk,a awu awk,a awu awk ,,mawk)或运行时错误(BSD Awk)。
    • 即使您确实使用了 shell 变量 "$A"getline line <方法也无法正常工作,因为它需要 fileName ;因此,您必须首先将$A的内容写入(临时)文件,awk脚本中指定该文件的路径代替$A
    • 您可以看到,这很麻烦,通常getline很少是正确的方法 - 请参阅http://awk.info/?tip/getline
  • 另外,即使它包含 data ,也就是通过 "$B",就好像是 fileName to awk

    • 要真正传递数据,您必须使用 stdin ;在bash中,这里最简单的方法是使用<<<"$B"(所谓的此处串线)。

相关内容

  • 没有找到相关文章

最新更新