Dodaj znak przed bardzo dużym plikiem, aby wysłać go do skryptu powłoki

0

Próbuję uruchomić skrypt powłoki w pliku 31,65 Go json.

./oetl.sh database.json

Muszę mieć nawiasy przed i po pliku.

Co mam w bazie danych.json:

{..},{..},..

Czego chcę :

[{..},{..}..]

Czy można to zrobić bez edycji pliku? Jeśli nie, jak mogę szybko edytować plik?

Wiem, że mogę szybko powtórzyć nawias zamykający:

echo "]" >> database.json

Jak mogę dodać nawias otwierający?

Nie wiem, czy jest to potrzebne i jestem nowy w skrypcie powłoki, ale tutaj jest plik oetl.sh:

#!/bin/sh
#
# Copyright (c) 2014 Luca Garulli
#

#set current working directory
cd `dirname $0`

# resolve links - $0 may be a softlink
PRG="$0"

while [ -h "$PRG" ]; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done

# Get standard environment variables
PRGDIR=`dirname "$PRG"`

# Only set ORIENTDB_HOME if not already set
[ -f "$ORIENTDB_HOME"/lib/orientdb-etl-@[email protected] ] || ORIENTDB_HOME=`cd "$PRGDIR/.." ; pwd`
export ORIENTDB_HOME

# Set JavaHome if it exists
if [ -f "${JAVA_HOME}/bin/java" ]; then 
   JAVA=${JAVA_HOME}/bin/java
else
   JAVA=java
fi
export JAVA

ORIENTDB_SETTINGS="-Djava.util.logging.config.file="$ORIENTDB_HOME/config/orientdb-client-log.properties" -Djava.awt.headless=true"
JAVA_OPTS=-Xmx512m
KEYSTORE=$ORIENTDB_HOME/config/cert/orientdb-console.ks
KEYSTORE_PASS=password
TRUSTSTORE=$ORIENTDB_HOME/config/cert/orientdb-console.ts
TRUSTSTORE_PASS=password
SSL_OPTS="-Dclient.ssl.enabled=false -Djavax.net.ssl.keyStore=$KEYSTORE -Djavax.net.ssl.keyStorePassword=$KEYSTORE_PASS -Djavax.net.ssl.trustStore=$TRUSTSTORE -Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASS"

$JAVA -server $JAVA_OPTS $ORIENTDB_SETTINGS $SSL_OPTS -Dfile.encoding=utf-8 -Dorientdb.build.number="@BUILD@" -cp "$ORIENTDB_HOME/lib/*" com.orientechnologies.orient.etl.OETLProcessor $*
AlexB
źródło

Odpowiedzi:

2

Utwórz nowy plik zawierający treść według własnego uznania. W tej sytuacji można to zrobić w następujący sposób:

echo "[" > database-new.json ; cat database.json >> database-new.json ; echo "]" >> database-new.json

> jest tworzenie nowego pliku (czyszczenie pliku, jeśli istnieje) i bezpośrednie stdout do tego. >> jest dołączany stdout do pliku.

Ouroborus
źródło
Zamierzałem odpowiedzieć na to samo polecenie, ale dodając komentarz wyjaśniający, że przesunięcie wszystkiego w pliku wymaga przepisania całego pliku i nie ma sposobu na obejście tego. Byłoby wiele sposobów, aby zrobić to w tym samym pliku, jeśli miejsce na dysku jest problemem, ale trzeba to zrobić w innym języku, takim jak C, PHP lub wiele innych języków, aby otworzyć plik w trybie do odczytu i zapisu.
Julie Pelletier
@JuliePelletier Jeśli chcesz wypróbować alternatywną odpowiedź, myślę, że nazwane potoki mogą osiągnąć to samo bez zjadania miejsca na dysku. Sam nie znam się zbytnio na ich używaniu.
Ouroborus
Wow okey Nie pomyślałem o tym dzięki! To ma sens.
AlexB