2016-08-22 2 views
0
その後、一つのファイル outFileに入れ、私が行うには、次のコードを書かれている、今、私は item1item2を削除したい

はのは、私は同じフォルダの下にfirstJSON.json secondJSON.json ...があるとしましょう、と各ファイルが BASHを使用して同じフォルダのすべてのJSONファイルから情報を取り除くにはどうすればいいですか?

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

のように見えますその:

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

に十分にパイプされますが、予想される出力であるかを示すことができますか? [jq](https://stedolan.github.io/jq/) – fedorqui

+0

@fedorqui期待される出力は 'FirstJSON:item1:item2'のように見える –

+0

ツールを推薦してくれてありがとうしかし、私は特定のフォルダの下で複数のファイルを処理する必要がある、私のコードは一度に1つのファイルを扱う –

答えて

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")} 
' 
関連する問題