So fügen Sie einer Datei benutzerdefinierte Zeilennummern hinzu

So fügen Sie einer Datei benutzerdefinierte Zeilennummern hinzu

Ich möchte file2an anhängen file1. Bevor ich das mache, muss ich eine benutzerdefinierte Zeilennummer hinzufügen file2.

file1

1 abc
2 bcd
3 efg

file2

mkh
dfd
aad
  1. Fügen Sie die Zeilennummer wie file2folgt hinzu file1.

    4 mkh
    5 dfd    
    6 aad
    
  2. Anhängenfile2file1

    cat file2 >> file1
    

Wie kann ich die Zeilennummer in file2die oben gezeigte einfügen?

Antwort1

nl -v "$((1+$(wc -l < file1)))" file2 >> file1

nlist ein Werkzeug, umNUmbermines einer Datei. Der -vSchalter liefert den Startwert der Zeilennummern. Ich verwende eine Subshell und , wcum die Zeilenanzahl von zu erhalten file1, füge eins hinzu, um die Startzeilennummer für zu erhalten file2, und verkette die Ergebnisse an das Ende von file1.

Beachten Sie, dass wc -l file1die Zeilenanzahl gefolgt vom Dateinamen gedruckt würde, da wir aber wcdie Standardeingabe von umgeleitet haben, sodass sie von kommt file1, wcweiß das Tool selbst nichts über den Dateinamen für file1und druckt nur die Zeilenanzahl (mit einigen Leerzeichen, die in diesem Kontext keine Rolle spielen).


Das kann gemacht werdenleichtsauberer, indem Sie einfach awkund verwenden nl:

nl -v $(awk 'END { print NR + 1 }' file1) file2 >> file1

Antwort2

Mit awk:

awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
  • $(wc -l <f1.txt)erhält die Anzahl der Zeilen in der Datei f1.txt, wir übergeben dies als nlVariable anawk

  • print NR+nl " " $0druckt jeden Datensatz von f2.txtmit der entsprechenden Zeilennummer, die der Variablen hinzugefügt wird nl, dann ein Leerzeichen und dann den gesamten Datensatz

Beispiel:

% cat f1.txt 
1 abc
2 bcd
3 efg

% cat f2.txt 
mkh
dfd
aad

% awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
4 mkh
5 dfd
6 aad

Antwort3

Eine andere awkLösung:

$ awk 'NF==1{print ++c" "$1 >> "file1"} NF>1{c=$1}' file1 file2
$ cat file1
1 abc
2 bcd
3 efg
4 mkh
5 dfd
6 aad


Allgemeiner Fall:

$ cat file1
1 abc x
2 bcd y
3 efg z
$ cat file2
mkh 1a
dfd foo
aad bar

$ awk 'NR==FNR{c=$1; next} {print ++c" "$0 >> "file1"}' file1 file2
$ cat file1
1 abc x
2 bcd y
3 efg z
4 mkh 1a
5 dfd foo
6 aad bar

Antwort4

Eine ganz einfache Antwort:

$ Katze Testtext
1. Der schnelle braune Fuchs sprang über den faulen Hund.

$ cat testText | tr ' ' '\n' | sort >testText2

$ cat -n Testtext Testtext2
     1 1. Der schnelle braune Fuchs sprang über den faulen Hund.
     2 1.
     3 braun
     4 Hunde.
     5 Fuchs
     6 sprang
     7 faul
     8 vorbei
     9 schnell
    10 die
    11 Die

verwandte Informationen