2016-08-17 4 views
0

私はbashスクリプティングの新機能を使用しています。bashを使用したファイル名からの入力を伴うJSONファイル

は、次のように私はJSONファイルで設定されている:

sub-285345_task-EMOTION_acq-LR_idir-acq-LR_epi.json 
sub-285345_task-EMOTION_acq-LR_idir-acq-RL_epi.json 
sub-285345_task-EMOTION_acq-RL_idir-acq-LR_epi.json 
sub-285345_task-EMOTION_acq-RL_idir-acq-RL_epi.json 

今すぐ各.jsonファイル名を見て、私は.jsonファイル内のキーと値のペアを持っていると思います。例えばの場合:ファイルsub-285345_task-EMOTION_acq-LR_idir-acq-LR_epi.json のために、私は、以下の情報を含める:

{ 
"PhaseEncodingDirection": "-i", 
"TotalReadoutTime": 0.08346, 
"IntendedFor": "func/sub-285345_task-rest_acq-LR_run-01_bold.nii.gz" 
} 

PhaseENcodingDirectionは、ファイル名にidir-acq-LRから派生しています。 LRの場合は-iRLの場合はiです。

これは、bashスクリプトを使用して、どのようにすることができますか?

何か助けていただければ幸いです。

+0

ノードjsのスクリプトの下にしてみてください。現在ファイルにあるJSONにデータを追加しますか? "TotalReadoutTime"と "IntendedFor"の値はどうやって取得していますか? – bytesized

+0

@bytesized "TotalReadoutTime"と "IntendedFor"の値はデフォルトで同じです... LRのidir-acq値としての.jsonファイル名が "PhasEncodingDirection"に変換されたい場合: "-i" .. " -i "または+ iはファイル名のidirの値に依存します。 LR os -iとRL is + i –

+0

JSONを 'bash'で解析するには[jq](https://stedolan.github.io/jq/)を見てください。 – Barmar

答えて

0

あなたは「各.jsonファイル名を見て、私は.jsonファイル内のキーと値のペアを持つようにしたい」によって、正確に何を意味する

var fs = require('fs'); 

fs.readdir('.', function(err, files) { 
    if (err) console.log(err); 
    files.forEach(function(file) { 
     var obj = { 
      "TotalReadoutTime": 0.08346, 

     }; 

     if (file.indexOf("idir-acq-LR") > -1) { 
      console.log(file); 
      obj.PhaseEncodingDirection = "-i"; 
      var intendedForPart1 = file.replace(/'-EMOTION-acq-LR'/g,'-rest_acq-LR'); 
      var intendedForPart2 = intendedForPart1.replace(/'_epi.json'/g,'_run-01_bold.nii.gz'); 
      obj.IntendedFor = 'func/' + intendedForPart2; 
      fs.writeFile(file, JSON.stringify(obj), 'utf-8'); 
     } else if (file.indexOf("idir-acq-RL") > -1) { 
      console.log(file); 
      obj.PhaseEncodingDirection = "i"; 
      var intendedForPart1 = file.replace(/'-EMOTION-acq-RL'/g,'-rest_acq-RL'); 
      var intendedForPart2 = intendedForPart1.replace(/'_epi.json'/g,'_run-01_bold.nii.gz'); 
      obj.IntendedFor = 'func/' + intendedForPart2; 
      //obj.IntendedFor = "func/sub-285345_task-rest_acq-RL_run-01_bold.nii.gz" 
      fs.writeFile(file, JSON.stringify(obj), 'utf-8'); 
     } 

    }); 
}); 
+0

質問は、 'Node.js'ではなく' bash'または 'python'のいずれかの解決策を要求します。 – Barmar

+0

@ Sham332他のファイルもすべてディレクトリから編集しています。私は、.jsonで終わり、サブ285345_task * .jsonのパターンを持つファイルだけを編集したいと思います。 –

+0

@ Sham332ノードjsと私は大丈夫です。私はもう1つの操作をしなければなりません。私は.jsonファイル名だけでなく、目的に合わせて編集したいと思います。ファイル名が 'sub-285345_task-EMOTION_acq-RL_idir-acq-RL_epi.json'の場合、IntendedForファイルは' func/sub-285345_task-EMOTION_acq-RL_bold.nii.g'になります。基本的に私はファイル名からidir_acq-RL_epi.jsonの代わりにEMOTION_acq-RLを使いたいと思っています。私は_bold.nii.gzを持っていたいと思っています。これもノードjsでも行えますか? –

関連する問題