2015-03-31 152 views
0

我想這樣做是爲了使用上的文件夾在我的所有文件一個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: can't open file 12404 
input record number 21077683, file 12404 
source line number 1 

上午我做錯了什麼:

當我使用它,我也得到awk錯誤?

回答

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 
+0

我有一個問題,如果我在bash腳本的awk中,我定義一個變量STR =「演出」,我該怎麼辦將它合併到awk打印命令中? {print $ 1,$ 2,$ 3,「MPC/K4me1」,$ 4,$ 5,$ 6,$ STR} – Tonja 2015-03-31 10:57:05

+0

@Tonja看到我的更新,你必須使用'-v' - >'awk -v STR =「$ STR 「'{print STR}'」。 – fedorqui 2015-03-31 11:00:14