我想通过这样做对文件夹中的所有文件使用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
我做错了吗?
答案 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