поєднати два текстові файли, додавши між собою деякий роздільник?


16

cat file1 file2об’єднає два текстові файли. Але якщо я хочу додати деякий роздільник між собою, як-от рядок-два ********************************, чи потрібно мені відкрити перший файл і додати рядок у його кінці, або відкрити другий файл і додати рядок у його верхній частині, а потім запустити catкоманда? Чи можна це зробити за допомогою просто запуску команди?

Відповіді:


17

В bashі zshви можете:

cat file1 <(echo '********************************') file2

або як вказано у коментарі mikeserv (у будь-якій оболонці):

echo '********************************' | cat file1 - file2

і в Bash, як прокоментував Девід Z:

cat file1 - file2 <<< '********************************'

Будуть показані будь-які нові рядки у файлах. Якщо ви не хочете, щоб новий рядок після "роздільника" (наприклад, file2починається з нового рядка), ви можете використовувати echo -n '****', тому придушіть новий рядок після *.


7
ви можете зробити те ж саме в будь-якій оболонці, якecho '**********************' |cat file - file2
mikeserv

Спасибі. завжди кот додає новий рядок між файлами неявно?
StackExchange для всіх

1
@Tim - безумовно, echoзавжди.
mikeserv

1
@Tim - не так виглядає тут, але подивіться самі -printf 'no newline' | tee file1 >file2; printf 'no newline' | cat file1 - file2
mikeserv

1
@Tim ви можете використовувати ...<(echo -n '****')для придушення нового рядка від луни. catпоказує лише один, коли файл має один (в кінці).
Антон

6

Інший підхід без використання, catяк знайдено звідси ,

awk 'FNR==1{print "******"}{print}' file1 file2 | sed '1d'

Кінцева sed 1dтруба полягає у видаленні першого рядка, який також матиме роздільник.

Однак остаточного sedвикористання дуже вдалося уникнути, якщо ми будемо використовувати команду, як запропонував 1_CR у своїх коментарях.

awk 'FNR==1 && NR!=1 {print "******"}{print}' file1 file2

1
ви можете уникнути sed, змінивши awkшаблон наFNR == 1 && NR != 1
iruvar

Вітаємо з досягненням 10К!
G-Man каже: "Відновіть Моніку"

@ G-Man, спасибі велике Це так приємно з вами привітатись :)
Рамеш

Це дозволяє легко розширити
Поль,

3

Ви також можете розділити його на кілька команд:

cat file1; echo '------------'; cat file2

І ви можете передавати або перенаправляти це, використовуючи групову команду або нижню частину оболонки:

# GROUP COMMAND:
{ cat file1; echo '----------'; cat file2; } | other-command
#                                        ^ final semicolon is part of the syntax!

# SUBSHELL:
( cat file1; echo '----------'; cat file2 ) | other-command

Звичайно, ви можете написати це через кілька рядків, а не використовувати крапки з комою, як звичайні. І легко поширити на інший файл з іншим роздільником і т.д.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.