У мене є два файли, які мають наступний вміст
Файл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
команди. Ідея така:
- Використовуйте
grep
для нумерації рядків кожного файлу. - Використовуйте
sed
щоб видалити ім'я файлу та вставити номер рядка в стовпчик, відокремлений пробілом. - Використовуйте
sort -n
сортувати за номером рядка, який є стабільним і зберігає порядок файлів. - Викиньте номер рядка з
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
Ви можете використовувати дескриптори файлів, читати з двох файлів і друкувати кожен рядок у вихідному файлі.