将bash循环变量通过管道传递给AWK

时间:2017-03-29 14:12:44

标签: bash loops awk pipe

我有以下bash脚本:

for file in *.gz; do 
    zgrep @ $file | awk '{split($0,a,":");  
    print $file"\t@RID\tT1:"a[1]"\tT2:"a[2]"\tT3:"a[3]}' > out.csv; 
done

我想创建一个输出csv / tbi文件,其文件名放在通过awk传输的zgrep输出的第一列中。

错误是:

  

" awk:非法字段$(),名称"文件"输入记录编号1,文件
  源代码行编号2"

我期待得到这个:

列标题: (这些不需要在实际的输出文件中,我只是为了清楚起见,因为我无法找到如何与stackoverflow上的标签分开):

filename | RID | T1 | T2 | T3

输出行:

FILENAME.gz @RID T1:text1 T2:text2 T3:text3

...这里有更多行...

如果我删除了打印命令中的$文件,它将起作用(不用说它省略了文件名)。我在awk调用和外部尝试了以下选项,但无济于事:

-v i=$file 

任何建议或解决方法都将不胜感激。

1 个答案:

答案 0 :(得分:1)

for file in *.gz; do 
    zgrep @ "$file" |
    awk -F':' -v OFS='\t' -v file="$file" '{
        print file, "@RID", "T1:" $1, "T2:" $2, "T3:" $3
    }' 
done > out.csv