cat file1 file22つのテキストファイルを結合します。しかし、の間に********************************1 つまたは2つの行のようにセパレータを追加したい場合は、最初のファイルを開いて最後に行を追加するか、2番目のファイルを開いて先頭に行を追加してから実行する必要がありますcatコマンド?コマンドを実行するだけで実行できますか?
cat file1 file22つのテキストファイルを結合します。しかし、の間に********************************1 つまたは2つの行のようにセパレータを追加したい場合は、最初のファイルを開いて最後に行を追加するか、2番目のファイルを開いて先頭に行を追加してから実行する必要がありますcatコマンド?コマンドを実行するだけで実行できますか?
回答:
でbashとzshあなたが行うことができます。
cat file1 <(echo '********************************') file2
または、mikeservがコメントで示したように(シェルで):
echo '********************************' | cat file1 - file2
そして、デビッド・Zがコメントしたようにバッシュで:
cat file1 - file2 <<< '********************************'
ファイル内の改行が表示されます。「セパレータ」の後に改行が必要ない場合(たとえばfile2、改行で始まる場合)を使用できますecho -n '****'。そのため、の後の改行を抑制します*。
echo常にそうです。
printf 'no newline' | tee file1 >file2; printf 'no newline' | cat file1 - file2
...<(echo -n '****')、改行をエコーから抑制するために使用できます。catファイルに(最後に)1つある場合にのみ1つを表示します。
awk 'FNR==1{print "******"}{print}' file1 file2 | sed '1d'
最後のsed 1dパイプは、区切り文字を持つ最初の行を削除することです。
ただし、1_CRのコメントでsed示唆されているようにコマンドを使用すると、最終的な使用を回避できます。
awk 'FNR==1 && NR!=1 {print "******"}{print}' file1 file2
sed変更してawkにパターンをFNR == 1 && NR != 1
複数のコマンドに分割することもできます:
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
もちろん、通常のようにセミコロンを使用する代わりに、複数の行にそれを書くことができます。また、別の区切り文字などを使用して別のファイルに簡単に拡張できます。
echo '**********************' |cat file - file2