Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 将两个变量而不是两个文件传递给awk_String_Bash_File_Variables_Awk - Fatal编程技术网

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

String 将两个变量而不是两个文件传递给awk,string,bash,file,variables,awk,String,Bash,File,Variables,Awk,假设在执行bashshell脚本期间动态生成两个多行文本文件:file1和file2 $ 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;

假设在执行bashshell脚本期间动态生成两个多行文本文件:
file1
file2

$ 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)
$awk'{打印文件名,FNR,$0}'
$ awk '{print FILENAME, FNR, $0}' <(echo 'foo') <(echo 'bar')
/dev/fd/63 1 foo
/dev/fd/62 1 bar