Gå tilbake   Foreldreportalen > FPForum > Kommunikasjon > HPs vevstove

Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

HPs vevstove Forum for datasnakk.

Svar
 
Trådverktøy Visningsmåter
Gammel 30-05-18, 10:05   #1
HP
Administrator
 
HP sin avatar
 
Medlem siden: Sep 2006
Hvor: Bergen
Innlegg: 13.735
Blogginnlegg: 6
HP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt av
Spørsmål

Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

Jeg har et par database dumper på noen GB. Jeg trenger å slette en linje + siste komma på linjen før.

Fra:

Kode:
  
  PRIMARY KEY (`postid`),
  KEY `userid` (`userid`),
  KEY `threadid` (`threadid`,`userid`),
  FULLTEXT KEY `title` (`title`,`pagetext`)

Til:

Kode:
  
  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?

HP er ikke aktiv   Svar med sitat
Gammel 30-05-18, 21:26   #2
Einar
Administrator
 
Medlem siden: Jul 2008
Innlegg: 92
Einar er litt kulEinar er litt kul
Standard

Sv: Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

Opprinnelig lagt inn av HP, her.

Jeg har et par database dumper på noen GB. Jeg trenger å slette en linje + siste komma på linjen før.

Fra:

Kode:
  
  PRIMARY KEY (`postid`),
  KEY `userid` (`userid`),
  KEY `threadid` (`threadid`,`userid`),
  FULLTEXT KEY `title` (`title`,`pagetext`)

Til:

Kode:
  
  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

Einar er ikke aktiv   Svar med sitat
Gammel 31-05-18, 01:11   #3
HP
Administrator
 
HP sin avatar
 
Medlem siden: Sep 2006
Hvor: Bergen
Innlegg: 13.735
Blogginnlegg: 6
HP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt av
Standard

Sv: Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

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 er ikke aktiv   Svar med sitat
Gammel 31-05-18, 08:39   #4
HP
Administrator
 
HP sin avatar
 
Medlem siden: Sep 2006
Hvor: Bergen
Innlegg: 13.735
Blogginnlegg: 6
HP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt av
Standard

Sv: Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

Opprinnelig lagt inn av Einar, her.

har du litt mer fullverdige testdata, kan jeg skrible..

Her er en, linjen over er ikke lik for alle jeg vil fjerne.

Kode:
--
-- 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`
--

HP er ikke aktiv   Svar med sitat
Gammel 31-05-18, 21:52   #5
Einar
Administrator
 
Medlem siden: Jul 2008
Innlegg: 92
Einar er litt kulEinar er litt kul
Standard

Sv: Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

Opprinnelig lagt inn av HP, her.

Her er en, linjen over er ikke lik for alle jeg vil fjerne.

Kode:
--
-- 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.

Einar er ikke aktiv   Svar med sitat
Gammel 31-05-18, 22:46   #6
Juste
Populærkulturjunkie
 
Juste sin avatar
 
Medlem siden: Oct 2006
Hvor: I Cyberspace.
Innlegg: 2.089
Blogginnlegg: 1
Juste er virkelig godt liktJuste er virkelig godt liktJuste er virkelig godt liktJuste er virkelig godt liktJuste er virkelig godt liktJuste er virkelig godt liktJuste er virkelig godt liktJuste er virkelig godt liktJuste er virkelig godt liktJuste er virkelig godt likt
Standard

Sv: Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

Opprinnelig lagt inn av Einar, her.

#!/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.

Og dette er hvorfor jeg aldri skal sette mine bein borti Linux...

Juste er ikke aktiv   Svar med sitat
Gammel 31-05-18, 23:07   #7
Einar
Administrator
 
Medlem siden: Jul 2008
Innlegg: 92
Einar er litt kulEinar er litt kul
Standard

Sv: Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

Opprinnelig lagt inn av Juste, her.

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.

Einar er ikke aktiv   Svar med sitat
Gammel 06-06-18, 01:51   #8
Sir Limpalot
Det kan alltid bli verre.
 
Sir Limpalot sin avatar
 
Medlem siden: Aug 2011
Hvor: Akershus
Innlegg: 1.209
Sir Limpalot imponerer mange og er sikkert smartSir Limpalot imponerer mange og er sikkert smartSir Limpalot imponerer mange og er sikkert smartSir Limpalot imponerer mange og er sikkert smartSir Limpalot imponerer mange og er sikkert smartSir Limpalot imponerer mange og er sikkert smartSir Limpalot imponerer mange og er sikkert smartSir Limpalot imponerer mange og er sikkert smart
Standard

Sv: Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

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.

__________________
“There is a rumour going around that I have found God. I think this is unlikely because I have enough difficulty finding my keys, and there is empirical evidence that they exist.”
Sir Limpalot er ikke aktiv   Svar med sitat
Gammel 20-06-18, 19:40   #9
HP
Administrator
 
HP sin avatar
 
Medlem siden: Sep 2006
Hvor: Bergen
Innlegg: 13.735
Blogginnlegg: 6
HP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt avHP har mye å være stolt av
Standard

Sv: Linux/Mac: Endring av stor tekstfil med awk, sed eller grep

Opprinnelig lagt inn av Einar, her.

#!/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.

Den fungerer utmerket på Linux, men i MacOS får jeg følgende:

Kode:
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:

Kode:
#!/bin/bash
sed -e '/^\s\sFULLTEXT/d' |
sed -ne '
/ENGINE=MyISAM/!{H}
/ENGINE=MyISAM/{x; s/,[ \t]*$//; p; }
${g;p;}
'

HP er ikke aktiv   Svar med sitat
Svar

Trådverktøy
Visningsmåter

Innleggsregler
Du kan ikke starte nye tråder
Du kan ikke skrive svar
Du kan ikke laste opp vedlegg
Du kan ikke endre dine innlegg

BB code is
[IMG] kode er
HTML kode er Av
Bytt forum


Alle klokkeslett er GMT +2. Klokken er nå 20:38.


Powered by vBulletin
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Norsk: Lavkarbo.no | Selvrealisering.no
©2006 - 2015, Foreldreportalen.no