String 将两个变量而不是两个文件传递给awk
假设在执行bashshell脚本期间动态生成两个多行文本文件: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;
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