将两个变量而不是两个文件传递给awk

时间:2017-06-27 17:12:29

标签: string bash file variables awk

假设在执行bash shell脚本期间动态生成的两个多行文本文件:file1file2

$ echo -e "foo-bar\nbar-baz\nbaz-qux" > file1
$ cat file1
foo-bar
bar-baz
baz-qux

$ echo -e "foo\nbar\nbaz" > file2
$ cat file2
foo
bar
baz

进一步假设我希望使用 awk 来对两个文件的文本字符串进行操作。例如:

$ awk 'NR==FNR{var1=$1;next} {print $var1"-"$1}' FS='-' file1 FS=' ' file2

有什么方法可以让我不得不将文本字符串保存为我脚本中的文件,而是将文本字符串传递给awk作为变量(或者像字符串之类的那样)?

有些事情:

$ var1=$(echo -e "foo-bar\nbar-baz\nbaz-qux")
$ var2=$(echo -e "foo\nbar\nbaz")
$ awk 'NR==FNR{var1=$1;next} {print $var1"-"$1}' FS='-' "$var1" FS=' ' "$var2"
# awk: fatal: cannot open file `foo-bar
# bar-baz
# baz-qux' for reading (No such file or directory)

1 个答案:

答案 0 :(得分:1)

$ awk '{print FILENAME, FNR, $0}' <(echo 'foo') <(echo 'bar')
/dev/fd/63 1 foo
/dev/fd/62 1 bar