文件夹中所有文件上的awk脚本
我希望通过以下操作对文件夹中的所有文件使用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 '{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}'。