HP sa
for 6år siden:
Jeg har et par database dumper på noen GB. Jeg trenger å slette en linje + siste komma på linjen før.
Fra:
PRIMARY KEY (`postid`),
KEY `userid` (`userid`),
KEY `threadid` (`threadid`,`userid`),
FULLTEXT KEY `title` (`title`,`pagetext`)
Til:
PRIMARY KEY (`postid`),
KEY `userid` (`userid`),
KEY `threadid` (`threadid`,`userid`)
Det er flere linjer etter FULLTEXT-linjen. Den forekommer 2 ganger og begge skal slettes. Bruker BBEdit (Mac) nå for å endre manuelt, de andre teksteditorene bare krasjer når jeg forsøker å åpne filene.
Jeg skal ikke bruke søk etter databasene er importert, så jeg sparer rundt 30min på å importere uten.
Hatt lite Google-hell, peker i retning av awk som riktig verktøy. Noen awk-kyndige her?
Einar sa
for 6år siden:
HP sa:
Jeg har et par database dumper på noen GB. Jeg trenger å slette en linje + siste komma på linjen før.
Fra:
PRIMARY KEY (`postid`),
KEY `userid` (`userid`),
KEY `threadid` (`threadid`,`userid`),
FULLTEXT KEY `title` (`title`,`pagetext`)
Til:
PRIMARY KEY (`postid`),
KEY `userid` (`userid`),
KEY `threadid` (`threadid`,`userid`)
Det er flere linjer etter FULLTEXT-linjen. Den forekommer 2 ganger og begge skal slettes. Bruker BBEdit (Mac) nå for å endre manuelt, de andre teksteditorene bare krasjer når jeg forsøker å åpne filene.
Jeg skal ikke bruke søk etter databasene er importert, så jeg sparer rundt 30min på å importere uten.
Hatt lite Google-hell, peker i retning av awk som riktig verktøy. Noen awk-kyndige her?
så lenge fulltextlinjen er på egen linje, kan du ikke bare gjøre grep -v FULLTEXT for å bli kvitt de linjene, med en påfølgende sedregle for å fjerne komma på den siste key-en? har du litt mer fullverdige testdata, kan jeg skrible..
awk funker jo alltid, men det er plutselig litt jobb, da. :P
HP sa
for 6år siden:
Det ligger noen dumper på serveren. Å fjerne FULLTEXT-linjen er ikke noe problem, det er avsluttende komma på linjen før trøbler (mariadb/mysql vil ikke ha den).
HP sa
for 6år siden:
Einar sa:
har du litt mer fullverdige testdata, kan jeg skrible..
Her er en, linjen over er ikke lik for alle jeg vil fjerne.
--
-- Table structure for table `post`
--
DROP TABLE IF EXISTS post
;
/*!40101 SET @saved_cs_client = @@character_set_client /;
/ !40101 SET character_set_client = utf8 /;
CREATE TABLE post
(
postid
int(10) unsigned NOT NULL AUTO_INCREMENT,
threadid
int(10) unsigned NOT NULL DEFAULT '0',
parentid
int(10) unsigned NOT NULL DEFAULT '0',
username
varchar(100) NOT NULL DEFAULT '',
userid
int(10) unsigned NOT NULL DEFAULT '0',
title
varchar(250) NOT NULL DEFAULT '',
dateline
int(10) unsigned NOT NULL DEFAULT '0',
pagetext
mediumtext,
allowsmilie
smallint(6) NOT NULL DEFAULT '0',
showsignature
smallint(6) NOT NULL DEFAULT '0',
ipaddress
varchar(15) NOT NULL DEFAULT '',
iconid
smallint(5) unsigned NOT NULL DEFAULT '0',
visible
smallint(6) NOT NULL DEFAULT '0',
attach
smallint(5) unsigned NOT NULL DEFAULT '0',
infraction
smallint(5) unsigned NOT NULL DEFAULT '0',
reportthreadid
int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (postid
),
KEY userid
(userid
),
KEY threadid
(threadid
,userid
),
FULLTEXT KEY title
(title
,pagetext
)
) ENGINE=MyISAM AUTO_INCREMENT=4699964 DEFAULT CHARSET=latin1;
/ !40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table post
Einar sa
for 6år siden:
HP sa:
Her er en, linjen over er ikke lik for alle jeg vil fjerne.
--
-- Table structure for table `post`
--
DROP TABLE IF EXISTS post
;
/*!40101 SET @saved_cs_client = @@character_set_client /;
/ !40101 SET character_set_client = utf8 /;
CREATE TABLE post
(
postid
int(10) unsigned NOT NULL AUTO_INCREMENT,
threadid
int(10) unsigned NOT NULL DEFAULT '0',
parentid
int(10) unsigned NOT NULL DEFAULT '0',
username
varchar(100) NOT NULL DEFAULT '',
userid
int(10) unsigned NOT NULL DEFAULT '0',
title
varchar(250) NOT NULL DEFAULT '',
dateline
int(10) unsigned NOT NULL DEFAULT '0',
pagetext
mediumtext,
allowsmilie
smallint(6) NOT NULL DEFAULT '0',
showsignature
smallint(6) NOT NULL DEFAULT '0',
ipaddress
varchar(15) NOT NULL DEFAULT '',
iconid
smallint(5) unsigned NOT NULL DEFAULT '0',
visible
smallint(6) NOT NULL DEFAULT '0',
attach
smallint(5) unsigned NOT NULL DEFAULT '0',
infraction
smallint(5) unsigned NOT NULL DEFAULT '0',
reportthreadid
int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (postid
),
KEY userid
(userid
),
KEY threadid
(threadid
,userid
),
FULLTEXT KEY title
(title
,pagetext
)
) ENGINE=MyISAM AUTO_INCREMENT=4699964 DEFAULT CHARSET=latin1;
/ !40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table post
#!/bin/bash
sed -e '/FULLTEXT/d' |
sed -ne '
/ENGINE=MyISAM/!{H}
/ENGINE=MyISAM/{x; s/,[ \t]*$//; p; }
${g;p;}
'
Slapp å tenke, kunne bare tilpasse noe jeg fant - cat databasedump til det scriptet, og vips.
Juste sa
for 6år siden:
Og dette er hvorfor jeg aldri skal sette mine bein borti Linux...
Einar sa
for 6år siden:
Juste sa:
Og dette er hvorfor jeg aldri skal sette mine bein borti Linux...
Vil ikke si tekstmassasje er et egnet eksempel å trekke frem operativsystem på. Alle moderne operativsystemer lar deg peke og klikke deg intuitivt gjennom de vanlige brukerbehovene. Det HP driver med er noe helt annet, og du ville ikke fått en enklere vei med f.eks. Windows. :)
Sir Limpalot sa
for 6år siden:
Jeg har scriptet i Linux (Bash) i årevis og er nå nødt for å lære meg Powershell...
Hvis du ikke er dritgod i Powershell er det litt urettferdig å rakke ned på Linux fordi du ikke er tilsvarende god i Bash, synes jeg. ;)
HP sa
for 6år siden:
Den fungerer utmerket på Linux, men i MacOS får jeg følgende:
MBPr:Dumps hp$ cat test.sql | ./sans-fulltext.sh
sed: 2: "
/ENGINE=MyISAM/!{H}
/E ...": extra characters at the end of H command
Google sier at linux har GNU sed, mens MacOS har BSD sed.
Skriptet:
#!/bin/bash
sed -e '/^\s\sFULLTEXT/d' |
sed -ne '
/ENGINE=MyISAM/!{H}
/ENGINE=MyISAM/{x; s/,[ \t]*$//; p; }
${g;p;}
'