Abschneiden von Zeichenfolgen nach dem Ausführen des awk-Skripts

Nov 23 2020

Ich habe diesen Code

BEGIN { FS=OFS=";" }
{ key = $(NF-1) } NR == FNR { for (i=1; i<(NF-1); i++) { if ( !seen[key,$i]++ ) {
            map[key] = (key in map ? map[key] OFS : "") $i } } next } { print $0 map[key] }

Ich benutze Code auf diese Weise

awk -f tst.awk 2.txt 1.txt

Ich habe zwei Textdateien

1 .txt

AA;BB;

2 .txt

CC;DD;BB;AA;

Ich versuche, diese 3 .txt-Ausgabe zu generieren

AA;BB;CC;DD;

Mit diesem Skript ist dies jedoch nicht möglich, da dieses Skript nur zurückgegeben wird AA;BB;

Logik: In der obigen Beschreibung werden nur Literalzeichenfolgen in einer Hash-Suche von Array-Indizes verwendet, sodass es egal ist, welche Zeichen Sie in Ihrer Eingabe haben. Jedoch über Beispielausgabe:
wenn in 2 .txt gibt es gemeinsame Felder auch in 1 .txt.for Beispiel BB;AA;dann müssen Sie sie in einer einzigen Zeile verketten, also AA;BB;CC;DD;wird Bestellung nicht erforderlich ist , zum Beispiel nicht relevant ist , wenn der Ausgang ist BB;AA;DD;CC;
nur Bedingung , die ist Erforderlich ist das Vermeiden von Duplikaten, aber mein Skript tut dies bereits

Antworten

1 RavinderSingh13 Nov 23 2020 at 08:33

Könnten Sie bitte versuchen, zu folgen, da laut OP-Kommentar beide Dateien nur 1 Zeile haben. Verwenden Sie also den pasteBefehl, um beide Dateien zu kombinieren und dann die Ausgabe per awkBefehl zu verarbeiten.

paste -d';' 1.txt 2.txt | 
awk '
BEGIN{
  FS=OFS=";"
}
{
  for(i=1;i<=NF;i++){
    if(!seen[$i]++){ val=(val?val OFS:"")$i }
  }
  print val
  delete seen
  val=""
}'