2017-02-08 140 views
0

編輯2: 我決定重寫這個以便更好地描述我的結果。Bash Shell腳本爲grep搜索的輸出分配新變量

我目前使用此代碼輸出文件的目錄不同的目錄中:

for file in /directoryX/*.txt 

do 
    grep -rl "Annual Compensation" $file 
done 

輸出顯示有一定的表我想在這樣的佈局來提取所有文件:

txtfile1.txt 
txtfile2.txt 
txtfile3.txt 

我一直在使用每個單獨的.txt文件,這個awk命令來提取表,然後將其發送到.csv:

awk '/Annual Compensation/{f=1} f{print; if (/<\/TABLE>/) exit}' txtfile1.txt > txtfile1.csv 

我的目標是找到一個命令,它將一次對列表中的每個文件運行我的awk命令。感謝那些已經提供建議的人。

+1

我無法理解您的要求。 CSV文件包含什麼內容? – codeforester

+0

對不起,我不明白你的問題。你能提供更多的上下文和更多的細節,特別是關於期望的輸出/效果嗎? – Dario

+0

我會首先嚐試在輸出= grep -rl「Annual Compensation」$ file \'中使用倒排撇號('\''),然後查看我可以用$ output做些什麼。 –

回答

0

如果我理解你的要求,我想你想要做的是添加的grep後一條線,或代替的grep,上面寫着:

awk '/Annual Compensation/{f=1} f{print; if (/<\/TABLE>/) exit}' $file > ${file}_new.csv 

當你說${file}_new.csv,它展開file變量,然後向其中添加字符串「_new.csv」。這就是你要拍的東西,對吧?

0

修改代碼:

for file in /directoryX/*.txt 
do 
    files+=($(grep -rl "Annual Compensation" $file)) 
done 

for f in "${files[@]}";do 
    awk '/Annual Compensation/{f=1} f{print; if (/<\/TABLE>/) exit}' "$f" > "$f"_new.csv 
done 

替代代碼:

files+=($(grep -rl "Annual Compensation" /directoryX/*)) 
for f in "${files[@]}";do 
awk '/Annual Compensation/{f=1} f{print; if (/<\/TABLE>/) exit}' "$f" > "$f"_new.csv 

在這兩種情況下,grep的結果和awk結果不受我的驗證 - 它只是一個複製 - 粘貼的你碼。