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-@VERSION@.jar ] || 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 $*

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.