awk从多变量而不是文件中读取

时间:2018-06-11 07:34:11

标签: bash awk

我有两个变量$name$birthday

$> echo "$name"
Mack
Lee

$> echo "$birthday"
3rd 
May

我想得到这样的输出:

Mack  1 1
Lee  2 2
3rd  3 1
May 4 2

但是,我输入命令:

$> echo -e "$name" "\n" "$birthday"|awk '{print $0,NR,FNR}'

得到这个:

Mack  1 1
Lee  2 2
 3rd  3 3   ###here a space in the first
May 4 4

如何删除前导空格并获得FNR值?

2 个答案:

答案 0 :(得分:2)

只需使用流程替换:

$ awk '{print $0,NR,FNR}' <(echo -e "$name") <(echo -e "$birthday")

这应解决两个问题,空格和FNR值。 这基本上将两个输入传递到awk,就像传递两个输入文件一样。

答案 1 :(得分:2)

从技术上讲,您可以使用Bash流程替换。 <(cmd)中的每个命令都作为类似文件句柄的对象公开给Awk和其他进程。

awk '{print $0,NR,FNR}' <(echo "$name") <(echo "$birthday")

但这确实引出了一个问题,即实际希望实现的目标。在shell变量中包含大量数据通常是更基本的设计问题的症状。