/ / об'єднати вміст двох файлів в один файл у bash - linux, bash, awk, sed, merge

об'єднати вміст двох файлів в один файл у bash - linux, bash, awk, sed, merge

У мене є два файли, які мають наступний вміст

Файл1

Line1file1
Line2file1
line3file1
line4file1

File2

Line1file2
Line2file2
line3file2
line4file2

Я хочу, щоб вміст цього файлу було об'єднано з файлом 3 як

Файл3

Line1file1
Line1file2
Line2file1
Line2file2
line3file1
line3file2
line4file1
line4file2

Як об'єднати файли послідовно з одного файлу та іншого файлу в bash?

Дякую

Відповіді:

7 для відповіді № 1

Ви завжди можете використовувати paste команда

paste -d"n" File1 File2 > File3

2 для відповіді № 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 для відповіді № 3

paste це шлях до цього, але ця альтернативаможе бути корисним підходом, якщо вам коли-небудь доведеться додати додаткові умови або якщо ви не хочете закінчити пустими рядками, коли один файл має більше рядків, ніж інший, або що-небудь інше, що ускладнює проблему:

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

1 для відповіді № 4

У Linux:

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

Якщо ви використовуєте OS X, використовуйте -E замість -r для sed команди. Ідея така:

  1. Використовуйте grep для нумерації рядків кожного файлу.
  2. Використовуйте sed щоб видалити ім'я файлу та вставити номер рядка в стовпчик, відокремлений пробілом.
  3. Використовуйте sort -n сортувати за номером рядка, який є стабільним і зберігає порядок файлів.
  4. Викиньте номер рядка з cut і перенаправити у файл.

Редагувати: Використовуючи paste набагато простіше, але результатом будуть порожні рядки, якщо один із ваших файлів довший за інший, цей метод буде продовжуватися лише з рядками з більш довгого файлу.


1 для відповіді № 5

Не такий витончений, але він робить свою роботу:

$ cp file1 file3
$ cat file2 >> file3

0 для відповіді № 6
while read line1 && read -u 3 line2
do
printf "$line1n" >> File3
printf "$line2n" >> File3
done < File1 3<File2

Ви можете використовувати дескриптори файлів, читати з двох файлів і друкувати кожен рядок у вихідному файлі.