我有以下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
任何建议或解决方法都将不胜感激。
答案 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