在awk中的变量中定向输出文件名


tmf@liphy$ cat data
5
3
tmf@liphy$ gawk -v "fileA"="testA" '$1<5{print $1 > "fileA"}' data

我希望输出进入testA。它改为文件A。我尝试了各种各样的逗号组合。什么都没用。

请您尝试以下操作。您使用的是双引号"fileA",它使其成为字符串,并将被视为应写入输出的文件a的输出文件名(而不是变量fileA(,而不是像> (fileA)那样使用名为fileA的变量名。

gawk -v "fileA"="testA" '$1<5{print $1 > (fileA)}' data

给定:

$ cat file
5
3

你是否考虑过可以使用shell而不是awk来创建文件:

fn="testA"
awk '$1<5' file > "$fn"

(注意,在这种情况下引用"$fn"…(

但RavinderSingh13的方法也有效:

awk -v fileA="$fn" '$1<5 {print > fileA}' file 

(请注意,由于外壳正在处理"$fn",所以它被引用,但> fileA引用而不是,因为它在awk脚本中…(

然后,无论哪种情况:

cat "$fn"   # "testA"
3

结果是,像"$fn"这样的变量展开需要在shell中引用,但不需要在awk脚本中引用。

感谢您的评论。我尝试了很多版本,结果发现大多数引号和多余的括号都可以删除。唯一重要的细节是不要把引号放在awk里面。

gawk-v";fileA"="testA"$1<5{打印$1>(文件A(}'数据

gawk-v fileA=";testA"$1<5{打印$1>(文件A(}'数据

gawk-v fileA=";testA"$1<5{打印$1>fileA}'数据

gawk-v fileA=testA'$1<5{打印$1>fileA}'数据

fn=";testA";;awk-v fileA="$fn"'$1<5{打印>文件A}'数据

fn=";testA";;awk-v fileA=$fn'$1<5{打印>文件A}'数据

fn=测试A;awk’$1<5’数据>fn

最新更新