【问题标题】:Pass bash loop variable through pipe to AWK通过管道将 bash 循环变量传递给 AWK
【发布时间】:2017-03-29 14:12:44
【问题描述】:

我有以下 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: 非法字段 $(), name "file" 输入记录号 1, file
源代码行号 2"

我希望得到这个:

列标题: (这些不需要在实际的输出文件中,为了清楚起见,我只是把它放在这里,因为我找不到如何用 stackoverflow 上的选项卡分隔):

文件名 |摆脱 | T1 | T2 | T3

输出行:

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

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

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

-v i=$file 

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

【问题讨论】:

    标签: bash loops awk pipe


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2017-07-16
      • 2021-10-03
      • 1970-01-01
      • 2017-08-02
      相关资源
      最近更新 更多