2013-09-01 267 views
0

我在寫一個bash/awk腳本來處理一個目錄下的數百個文件。他們都有「本地偏好」的名稱後綴。目的是從每個文件中提取兩個值(它們由「」引用)。我也想使用相同的文件名,但沒有名稱後綴。將awk變量傳遞給bash腳本

這裏是我做過什麼至今:

#!/bin/bash 

for file in * # Traverse all the files in current directory. 
    read -r name < <(awk ' $name=substr(FILENAME,1,length(FILENAME)-10a) END {print name}' $file) #get the file name without suffix and pass to bash. PROBLEM TO SOLVE! 
    echo $name # verify if passing works. 
    do 
    awk 'BEGIN { FS = "\""} {print $2}' $file #this one works fine to extract two values I want. 
    done 

exit 0 

我可以用

的awk '{打印SUBSTR(文件名,1,長度(文件名)-10)}' 提取文件名沒有後綴,但我堅持如何將bash作爲一個變量傳遞給我將用作輸出文件名(我在這裏閱讀了關於這個主題的所有帖子,但也許我是啞巴,但沒有一個適用於我)。

如果任何人都可以對此有所瞭解,特別是以「閱讀」開頭的行,你真的很感激。

非常感謝。

回答

2

試試這個:

#!/bin/bash 

dir="/path/to/directory" 

for file in "$dir"/*localprefs; do 
    name=${file%localprefs} ## Or if it has a .: name=${file%.localprefs} 
    name=${name##*/} ## To exclude the dir part. 
    echo "$name" 
    awk 'BEGIN { FS = "\""} {print $2}' "$file" ## I think you could also use cut: cut -f 2 -d '"' "$file" 
done 

exit 0 
+0

它的作品像魅力。非常感謝!我將用你的模板來表示輸出。 – user46292

+0

#!/ bin/bash dir =「/ path/to/dir」 diro =「/ path/to/dirout」 for「$ dir」/ * localprefs;做 name = $ {file%localprefs} ##或者如果它有一個。:name = $ {file%.localprefs} name = $ {name ## * /}; ##排除目錄部分。 觸摸 「$ DIRO」/ 「$名」 的awk 'BEGIN {FS = 「\」「} {打印$ 2}' 」$文件「 >> 」$ DIRO「/ 」$名「 做 退出0 – user46292

+0

如何編寫for循環來獲取名稱並創建文件,然後運行awk部分將兩行代碼放入文件中?請參閱上文。它非常接近,但在輸出文件中有兩個副本 – user46292

1

只取SBASE名字,你甚至都不需要在awk:

for file in * ; do 
    name="${file%.*}" 
    etc 
done 
+0

這是我得到了你的建議:附近有語法錯誤:行12意外的標記'FILE ='awk'{print substr(FILENAME,1,length(FILENAME)-10)}''' line 12:'FILE ='awk'{print substr(FILENAME,1,length(FILENAME) - 10)}''' – user46292

+1

不,不,不。使用'$()' – Kevin

+0

編輯 - 這是習慣的力量使用反引號 – stark