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

时间:2015-03-31 10:49:55

标签: 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, file 12404
 source line number 1

我做错了吗?

1 个答案:

答案 0 :(得分:0)

您当前的代码会将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