plik kota 1
foo
ice
two
plik kota 2
bar
cream
hundred
Pożądane wyjście:
foobar
icecream
twohundred
plik1 i plik2 zawsze będą miały taką samą liczbę wierszy w moim scenariuszu, na wypadek, gdyby było to łatwiejsze.
Prawdopodobnie odpowiednie narzędzie do tego zadania paste
paste -d '' file1 file2
Zobacz man paste
szczegóły.
Możesz także użyć pr
polecenia:
pr -TmJS"" file1 file2
gdzie
-T
wyłącza paginację-mJ
m pliki Erge, J oining karta linii-S""
rozdziel kolumny pustym ciągiem Jeśli naprawdę chcesz to zrobić przy użyciu czystej powłoki bash (niezalecane), to właśnie sugeruję:
while IFS= read -u3 -r a && IFS= read -u4 -r b; do
printf '%s%s\n' "$a" "$b"
done 3<file1 4<file2
(Uwzględniając to tylko dlatego, że temat pojawił się w komentarzach do innego proponowanego rozwiązania czysto bash).
Przez awk sposób:
getline x<"file2"
wczytuje całą linię z pliku2 i przechowuje w zmiennej x .print $0x
wypisuje całą linię z pliku 1 , używając$0
wtedy,x
która jest zapisaną linią pliku 2 .źródło
paste
jest droga . Jeśli chcesz sprawdzić inne metody, otopython
rozwiązanie:Jeśli masz kilka linii:
Zauważ, że w przypadku nierównej liczby wierszy ten kończy się na ostatnim wierszu pliku, który kończy się jako pierwszy.
źródło
Również z czystym
bash
(zauważ, że to całkowicie zignoruje puste linie):źródło
mapfile
do odczytu plików do tablic, albo użyj pętli while z dwomaread
poleceniami, odczytując z każdego ich fd.array=( $(cmd) )
lubarray=( $var )
. Użyjmapfile
zamiast tego.Perlowy sposób, łatwy do zrozumienia:
Zacząć od:
Wydajność:
źródło