Soluzione alternativa per un bug che trova EOL dove non ce n'è uno?

0

MacOS 10.13.3 (e versioni precedenti)

Ho un file di testo contenente cinese e inglese, con le due schede separate.

Se voglio cercare un particolare carattere alla fine di una frase ma non nel mezzo, posso provare egrep "饱\t" *file* ma ottengo un prompt di continuazione. Se interrompo (Ctl-C) e faccio una freccia su, bash / Terminal mi dice che il comando precedente era egrep "饱

Ma se uso virgolette singole, funziona. Questo mi ha fatto pensare che il guscio avesse l'insetto. Ma alcuni esperimenti hanno rivelato che ciò avviene con i comandi della shell alcuni e non con gli altri. echo $LANGen_US.UTF-8

L'ho visto con virgolette su molti personaggi. Non l'ho visto con virgolette singole, ma questo non significa che non ce ne siano.

Il mio problema è che ho bisogno di unire definizioni da più file, dove il cinese è lo stesso ma il resto della linea potrebbe essere diverso. Almeno uno dei file è di oltre cinquemila righe, quindi fare un ordinamento e quindi eseguire la scansione delle linee adiacenti non è pratico. Ho provato a inserirli in un foglio di calcolo, a ordinare e a disporre di una colonna di formule che confrontano le righe adiacenti, ma sfortunatamente entrambe ordinate in bash e in LibreOffice Calc hanno lo stesso bug nelle loro routine di ordinamento, in modo che i duplicati non finiscano insieme! o esempio, A e B erano due diversi caratteri cinesi, ognuno dei quali era il primo carattere nei file due volte e ciascuno era seguito da una scheda (verificato esaminando con od -xc che i modelli di byte erano corretti e che non c'erano caratteri non stampabili prima della scheda). Ma si sono classificati nella sequenza A B A B. Se altri fossero più distanti, non lo so.

A causa del bug di ordinamento, volevo fare qualcosa di simile

awk '{print $1}' file1 | while read ITEM; do
  egrep "^$ITEM\t" file1 >> MergeDir/$ITEM # avoid items where $ITEM is a substring
  egrep "^$ITEM\t" file2 >> MergeDir/$ITEM
  egrep "^$ITEM\t" file3 >> MergeDir/$ITEM
done

Quindi ho potuto modificare qualsiasi file che fosse più di una linea in file a riga singola e infine concatenare tutti i file a riga singola.

Anche se sapessi che il tick singolo funzionerebbe per ogni carattere, non funzionerebbe qui perché impedirebbe alla shell di espandere la variabile.

L'unica soluzione a cui ho pensato è di generare uno script gigantesco che abbia tutte le ricerche completamente scritte senza variabili. Anche allora c'è ancora il dubbio sulle single-ticks.

Qualunque metodo alternativo? (che si spera non impieghi ore a prepararsi o troppi millisecondi per articolo da eseguire)

Mi piacerebbe anche provare a utilizzare SQL, ma il modo in cui i documenti di LibreOffice dicono di importare file e / o fogli di calcolo non funziona. (Hmm, ho installato MySQL, forse ci proverò.)

    
posta WGroleau 22.02.2018 - 07:15
fonte

0 risposte

Leggi altre domande sui tag