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 № 1Zawsze 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:
- Posługiwać się
grep
aby numerować wiersze każdego pliku. - Posługiwać się
sed
aby upuścić nazwę pliku i umieścić numer linii w kolumnie oddzielonej spacjami. - Posługiwać się
sort -n
sortować według numeru linii, który jest stabilny i zachowuje kolejność plików. - 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.