間にセパレータを追加して2つのテキストファイルを結合しますか?


16

cat file1 file22つのテキストファイルを結合します。しかし、の間に********************************1 つまたは2つの行のようにセパレータを追加したい場合は、最初のファイルを開いて最後に行を追加するか、2番目のファイルを開いて先頭に行を追加してから実行する必要がありますcatコマンド?コマンドを実行するだけで実行できますか?

回答:


17

bashzshあなたが行うことができます。

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

または、mikeservがコメントで示したように(シェルで):

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

そして、デビッド・Zがコメントしたようにバッシュで:

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

ファイル内の改行が表示されます。「セパレータ」の後に改行が必要ない場合(たとえばfile2、改行で始まる場合)を使用できますecho -n '****'。そのため、の後の改行を抑制します*


7
あなたのような任意のシェルでこれと同じことを行うことができますecho '**********************' |cat file - file2
mikeserv

ありがとう。catは常に暗黙的にファイル間に新しい行を追加しますか?
14

1
@Tim- echo常にそうです。
mikeserv 14年

1
@Tim -ここではそのように見えますが、自分のために見ていない-printf 'no newline' | tee file1 >file2; printf 'no newline' | cat file1 - file2
mikeserv

1
@Timは...<(echo -n '****')、改行をエコーから抑制するために使用できます。catファイルに(最後に)1つある場合にのみ1つを表示します。
Anthonの

6

ここcatからわかるように、使用しない別のアプローチ、

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

最後のsed 1dパイプは、区切り文字を持つ最初の行を削除することです。

ただし、1_CRのコメントでsed示唆されているようにコマンドを使用すると、最終的な使用を回避できます。

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

1
あなたは避けることができますsed変更してawkにパターンをFNR == 1 && NR != 1
iruvar

10Kに達しておめでとうございます!
G-Manが「Reinstate Monica」と言う

@ G-Man、どうもありがとう。とても嬉しいです:)
Ramesh 14年

これは簡単に拡張子がファイルパターンのregexですることができます
ポール・

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

もちろん、通常のようにセミコロンを使用する代わりに、複数の行にそれを書くことができます。また、別の区切り文字などを使用して別のファイルに簡単に拡張できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.