文件夹中所有文件上的awk脚本

文件夹中所有文件上的awk脚本,awk,Awk,我希望通过以下操作对文件夹中的所有文件使用awk: awk '{print $1"\t"$2"\t"$3"\tMPC/K4me1"$4"\t"$5"\t"$6}' GSM*.bed > tmp $$ mv tmp GSM*.bed 我会遇到一些异常情况吗?它会按照这样的顺序处理所有文件吗?tmp实际上对每个文件都是唯一的,并且不会有重叠 当我使用awk时,我也会收到一个错误: awk: can't open file 12404 input record number 21077683

我希望通过以下操作对文件夹中的所有文件使用awk:

awk '{print $1"\t"$2"\t"$3"\tMPC/K4me1"$4"\t"$5"\t"$6}' GSM*.bed > tmp $$ mv tmp GSM*.bed
我会遇到一些异常情况吗?它会按照这样的顺序处理所有文件吗?tmp实际上对每个文件都是唯一的,并且不会有重叠

当我使用awk时,我也会收到一个错误:

awk: can't open file 12404
 input record number 21077683, file 12404
 source line number 1

我做错什么了吗?

您当前的代码会将GSM*.bed表达式扩展为:

awk '...' GSM1.bed GSM2.bed ... > tmp $$ mv tmp GSM1.bed GSM2.bed
这没有多大意义。您可以使用awk中的FILENAME等来处理文件,但它有点复杂

通常最好使用while循环遍历文件,并为每个文件运行awk:

for file in GSM*.bed
do
   awk -v OFS="\t" '{print $1, $2, $3, "MPC/K4me1", $4, $5, $6}' "$file" > tmp
   mv tmp "$file"
done
注意:我使用OFS将输出字段分隔符设置为选项卡。这样,您就不必在print命令中对其进行硬编码

要使用变量,请使用-v,如下所示:

awk -v OFS="\t" -v your_var="$STR" '{print $1, $2, $3, "MPC/K4me1", $4, $5, $6, your_var}' "$file" > tmp

我还有一个问题,如果我是bash脚本中的awk,我定义了一个变量STR=gig,我如何将它合并到awk print命令中?{print$1,$2,$3,MPC/K4me1,$4,$5,$6,$STR}@Tonja看到我的更新,你必须使用-v->awk-vstr=$STR'{print STR}'。