AWKを使用してCSVを解析し、改行を使用してbash varにフィールドを返します。

AWKを使用してCSVを解析し、改行を使用してbash varにフィールドを返します。

APIを使用する新しいアプリケーションに移行するには、パスワードデータベース(Keepass)のcsvファイルを使用する必要があります。 API は、JSON データ型を必要とするパブリッシュ要求を通じて更新されます。私がしなければならないのは、KeePass CSVを使用してAPIに関連付けられたパスワードやその他の情報をエクスポートすることです。私はbashとawkを使ってスクリプトを書くことにしました。

csvファイルの列は次のように配列されます。

"Group","Title","Username","Password","URL","Notes","TOTP","Icon","Last Modified","Created"

一部のコメントには改行があるため、「説明」フィールドは複数行です。

"That's an important note, <br/>
some extra infos <br/>
concerning a password"

以下は、データを公開するためのAPIリクエストの例です。データフィールドはJSON形式です。

このリクエストに必要なフィールドをすべて追加したわけではありませんが、すでにどのように機能するかを確認できます。 KeePass と API フィールド名が異なるため、一部のフィールド名が異なります。

var1=name
var2=my.name
var3=password456

curl -s --request PUT -u username123:password123 -H 'Content-Type: application/json; charset=utf-8' https://tpm.mydomain.com/index.php/api/v5/passwords/1659.json --data-binary @- <<DATA
{
"name": "$var1",
"username": "$var2",
"password": "$var3"
}
DATA

私のCSVファイルフィールドをフィールドごとに解析し、行解析を完了したら、データベースにパスワードを公開するようにAPIリクエストを行う予定です。次に、残りの行ごとにこれを行います。

CSVを処理するために、私の場合は非常に便利で便利なようなAWK言語を見つけました。 gsubコマンドを使用して私のファイルを何度もテストしましたが、これは改行文字(\ n)を置き換えるのに役立ちました。どうやって進むべきかわかりません。以下はその一部です(最初の項目のみが機能します。

cat keepass.csv | awk NF=NF RS=/\n/ OFS=\n
cat keepass.csv |awk 'BEGIN {RS=","}{gsub("/\n/","",$0); print $0}'
cat keepass.csv | awk 'BEGIN {RS=""}{gsub(/\n/,"",$6); print $0}'

また、awkの後に-vを追加してbash varを共有できることを知っています。これは私が得ることができる最も近いコードです。

awk -v RS='"\n' -v FPAT='"[^"]*"|[^,]*' '{
print "Row n°", NR, ""
for (i=1; i<=NF; i++) {
sub(/^"/, "", $i)
printf "Field %d, value=[%s]\n", i, $i
}} keepass.csv

私が探しているのは、複数行のコメントを考慮してcsvのすべての列を解析し、それをJSON形式でbashのグローバル変数に入力するコマンドです。

次のようにしてビルドする必要があると思います。

awk -v 'BEGIN{parsing and replacing keeping '\n' of notes}
if end of row,
return boolean to bash for processing the API requests, wait,
restart the loop}''

私はスクリプトが初めてで、数行で完了することができると思いますが、どのように進むべきかわかりません。必要に応じて言語をPythonに変更し、コードにいくつかのツールを追加できます。

ベストアンサー1

複数行はCSVセルの機能であり、CSV認識ユーティリティを使用できます。ミラー

たとえば、次のような場合このCSVファイル君は走れるよ

  • mlr --csv cut -f fieldA acr.csv最初の列を切り取る
  • mlr --icsv --ojson cut -f fieldA acr.csv最初の列を切り取り、すべて次に変換します。JSON
[
  {
    "fieldA": "That's an important note,\nsome extra infos\nConcerning a password\nIpsum"
  },
  {
    "fieldA": "hello"
  }
]

ご覧のとおり、Millerはセルキャリッジリターン文字(RFC4180準拠)。

以下はサンプル入力ファイルのイメージです。

ここに画像の説明を入力してください。

おすすめ記事