2016-09-27 19 views
0

我在下面的格式AWK - 無法

regional_vol_WM_atlas[1-300].txt 

    651328 651328 
    553949 553949 
    307287 307287 
    2558 2558  

以下awk腳本應該由每個現有文件的第四行進行計算,創建一個新的文件有300個txt文件在我的目錄中更新文件在我的目錄中。

#!/bin/bash 

awk=/usr/bin/awk 

awkcommand=' 
FNR == 1 { 
    newfilename = FILENAME ; sub(".txt", "_prop.txt", newfilename) 
    printf "" > newf 
ilename 
} 
FNR == 4 { 
    $1=($1/0.824198)*0.8490061 
    $2=($2/0.824198)*0.8490061 
} 
{ 
    print >> newfilename 
} 
'regional_vol_WM_atlas[0-9].txt regional_vol_WM_atlas[0-9][0-9].txt regional_vol_WM_atlas1[0-4][0-9].txt regional_vol_WM_atlas15[02].txt 

不幸的是我無法更新目錄中的任何文件,當我運行該文件,我承擔以下錯誤

[email protected]:/media/dev/Daten/Task1/subject1/t1$ '/media/dev/Daten/Task1/subject1/t1/Method' 

/media/dev/Daten/Task1/subject1/t1/Method: line 18: regional_vol_WM_atlas10.txt: command not found 

能否請您糾正我在哪裏,我錯了,

回答

2

您的腳本不調用awk。它定義了一個名爲awk的變量,然後嘗試執行文件regional_vol_WM_atlas10.txt,並在其環境中設置變量awkcommand。唉,那個文件不在你的PATH中,所以bash找不到它。你需要做的,而不是:

awk "$awkcommand" file1 file2 ... 

(其中file1file2等都是輸入文件要作爲輸入使用。)

另外請注意,您的當前腳本追加文字文本regional_vol_WM_atlas[0-9].txt到awk命令的結尾(或者如果存在與該glob相匹配的文件,該文件的名稱將被追加),這是你不想要的。總的來說,你應該寫的是:

#!/bin/bash 

    awkcommand=' 
    FNR == 1 { 
     newfilename = FILENAME ; sub(".txt", "_prop.txt", newfilename) 
     printf "" > newfilename 
    } 
    FNR == 4 { 
     $1=($1/0.824198)*0.8490061 
     $2=($2/0.824198)*0.8490061 
    } 
    { 
     print >> newfilename 
    } 
    ' 

    awk "$awkcommand" regional_vol_WM_atlas[0-9].txt \ 
     regional_vol_WM_atlas[0-9][0-9].txt \ 
     regional_vol_WM_atlas1[0-4][0-9].txt \ 
     regional_vol_WM_atlas15[02].txt 
+0

感謝您的糾正,現在我能夠解決我的問題 – DevanDevak

2

的問題是變量可以分配給一個命令,例如:

x='hello' some_command 

這實際上是bash認爲你正在嘗試做的事情。罪魁禍首是空白,它充當一個命令分隔符,所以才逃離(用\前綴)的文件名列表中的空白:

#!/bin/bash 

awk=/usr/bin/awk 

awkcommand=' 
FNR == 1 { 
    newfilename = FILENAME ; sub(".txt", "_prop.txt", newfilename) 
    printf "" > newf 
ilename 
} 
FNR == 4 { 
    $1=($1/0.824198)*0.8490061 
    $2=($2/0.824198)*0.8490061 
} 
{ 
    print >> newfilename 
} 
'\ regional_vol_WM_atlas[0-9].txt\ regional_vol_WM_atlas[0-9][0-9].txt\ regional_vol_WM_atlas1[0-4][0-9].txt\ regional_vol_WM_atlas15[02].txt 

我修改的唯一的事情是最後一行。