/ / scal zawartość dwóch plików w jeden plik w bash - linux, bash, awk, sed, scal

scalanie zawartości dwóch plików w jeden plik w bash - linux, bash, awk, sed, merge

Mam dwa pliki, które mają następującą zawartość

Plik1

Line1file1
Line2file1
line3file1
line4file1

File2

Line1file2
Line2file2
line3file2
line4file2

Chcę, aby zawartość tych plików została scalona w plik3 jako

Plik3

Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2

Jak połączyć pliki kolejno z jednego pliku i innego pliku w bashu?

Dzięki

Odpowiedzi:

7 dla odpowiedzi № 1

Zawsze możesz użyć paste dowództwo.

paste -d"n" File1 File2 > File3

2 dla odpowiedzi nr 2
$ cat file1
Line1file1
Line2file1
line3file1
line4file1

$ cat file2
Line1file2
Line2file2
line3file2
line4file2

$ paste -d "n" file1 file2 > file3

$ cat file3
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2

2 dla odpowiedzi nr 3

paste to sposób na to, ale ta alternatywamoże być użytecznym podejściem, jeśli kiedykolwiek będziesz musiał dodać dodatkowe warunki lub nie chcesz skończyć z pustymi wierszami, gdy jeden plik ma więcej wierszy niż inny lub cokolwiek innego, co czyni go bardziej skomplikowanym problemem:

$ awk -v OFS="t" "{print FNR, NR, $0}" file1 file2 | sort -n | cut -f3-
Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2

1 dla odpowiedzi nr 4

W Linuksie:

grep -En ".?" File1 File2 | sed -r "s/^[^:]+:([^:]+):(.*)$/1 2/g" 
| sort -n | cut -d" " -f2- > File3

Jeśli jesteś na OS X, użyj -E zamiast -r dla sed dowództwo. Idea jest taka:

  1. Posługiwać się grep aby numerować wiersze każdego pliku.
  2. Posługiwać się sed aby upuścić nazwę pliku i umieścić numer linii w kolumnie oddzielonej spacjami.
  3. Posługiwać się sort -n sortować według numeru linii, który jest stabilny i zachowuje kolejność plików.
  4. Upuść numer linii za pomocą cut i przekieruj do pliku.

Edytować: Za pomocą paste jest znacznie prostsze, ale spowoduje, że puste linie będą wyświetlane, jeśli jeden z twoich plików jest dłuższy niż drugi, ta metoda będzie kontynuowana tylko dla wierszy z dłuższego pliku.


1 dla odpowiedzi nr 5

Nie tak wyrafinowane, ale spełnia swoje zadanie:

$ cp file1 file3
$ cat file2 >> file3

0 dla odpowiedzi № 6
while read line1 && read -u 3 line2
do
printf "$line1n" >> File3
printf "$line2n" >> File3
done < File1 3<File2

możesz użyć deskryptorów plików, odczytać z dwóch plików i wydrukować każdą linię do pliku wyjściowego.