2017-03-04 3 views
0

Die Eingabedatei enthält folgende Zeilen:In Linux: Wie wiederhole ich mehrere Zeilen in einer Datei in der gleichen Reihenfolge?

a 
b 
c 

ich die Ausgabe als (n-mal) will:

a 
b 
c 
a 
b 
c 

Ich habe unter Befehl versucht, aber es hält die Bestellung nicht

while read line; do for i in {1..4}; do echo "$line"; done; done < file 

aber die Ausgabe ist

a 
a 
b 
b 
c 
c 
+0

Setzen Sie Ihren Code/Ihre Daten mit vier weißen Leerzeichen voran. Bitte werfen Sie einen Blick auf [editing-help] (http://stackoverflow.com/editing-help). – Cyrus

+1

Wie wäre es, einfach die Datei n mal anzuhängen, wie 'cat file1 >> file2' in einer Schleife? –

Antwort

2

Mit seq mit xargs:

seq 2 | xargs -Inone cat file 
+2

Unabhängig davon, dass die 'seq' nicht auf allen Systemen verfügbar ist, funktioniert die Lösung und löst das Problem. Könnte der Abenteurer eine Erklärung hinzufügen? +1 von mir. – jm666

1

Eine andere Lösung

#multicat count filename(s) 
multicat() { 
     local count=$1 
     shift 
     for((i=0;i < $count; i++)) { 
       cat "[email protected]" 
     } 
} 

multicat 3 abc   # outputs the "abc" file 3 times 
0

printf und brace expansion verwendet werden kann, eine Zeichenfolge N-mal wiederholen könnte, die dann als Eingabe für cat übergeben werden kann, das seine tut Job verketten


Mit perl, wenn die Datei für den Speicherbedarf klein genug ist, ganze

$ perl -0777 -ne 'print $_ x 2' file 
a 
b 
c 
a 
b 
c 
0

Eine kleine Lösung für den Druck file 3 mal zu schlürfte:

cat $(yes file | head -n 3) 

Der Befehl Substitution $()-cat file file file erweitert. Dies funktioniert nur für Dateinamen ohne Leerzeichen. Legen Sie IFS=$'\n' fest, wenn Ihr Dateiname Leerzeichen oder Tabulatoren enthält.

Verwandte Themen