2016-08-22 32 views
0

比方說,我有firstJSON.json secondJSON.json ...同一文件夾下,每個文件看起來像 如何使用BASH從同一文件夾下的每個JSON文件中去除信息?

{ 
    "obj1":"item1", 
    "obj2":"item2" 
} 

現在我想要去除item1item2,然後把它們放到一個文件outFile,我寫了下面的代碼做即:

function strip { 
    item1=$(cat $1 | grep 'obj1' | cut -d '"' -f4) 
    item2=$(cat $1 | grep 'obj2' | cut -d '"' -f4) 
    name=$(echo $1 | cut -d '.' -f1) 
    echo $name':'$item1':'$item2 >> ./outFile 
} 

但我要如何使用這段代碼從每個JSON文件脫光信息,然後把他們都變成outFile

+2

可以顯示什麼是預期的輸出?還要注意,有一個工具可以正確解析JSON:[jq](https://stedolan.github.io/jq/) – fedorqui

+0

@fedorqui期望的輸出看起來像'FirstJSON:item1:item2' –

+0

感謝您推薦工具,但現在我需要在特定文件夾下處理多個文件,我的代碼一次只處理一個文件 –

回答

0

你可以用for循環如下;

for j in *.json; do 
item1=$(cat $j | grep 'obj1' | cut -d '"' -f4) 
item2=$(cat $j | grep 'obj2' | cut -d '"' -f4) 
name=$(echo $j | cut -d '.' -f1) 
echo $name':'$item1':'$item2 >> ./outFile 
done 
1

單一的grep上的所有文件就足夠了管道輸送到一個awk芒格

files=$* 
grep -HPo '^ +"obj\d+" *: *"\K[^"]+' $files| 
awk -F: ' 
src == $1 { 
    printf(":%s", $2) 
    next 
} 
{ 
    if(src) printf("\n") 
    src=$1 
    f1=gensub(/\.[^.]*$/,"",1,$1) 
    printf("%s:%s", f1, $2) 
} 
END {printf("\n")} 
' 
相關問題