我想将多个文本文件连接到终端中的一个大文件。我知道我可以使用cat命令来做到这一点。但是,我希望每个文件的文件名在该文件的“数据转储”之前。有人知道怎么做吗?

我目前拥有的:

file1.txt = bluemoongoodbeer

file2.txt = awesomepossum

file3.txt = hownowbrowncow

cat file1.txt file2.txt file3.txt

期望的输出:

file1

bluemoongoodbeer

file2

awesomepossum

file3

hownowbrowncow

当前回答

如果你想用其他东西替换那些丑陋的==> <==

tail -n +1 *.txt | sed -e 's/==>/\n###/g' -e 's/<==/###/g' >> "files.txt"

解释:

Tail -n +1 *.txt -输出带头文件夹中的所有文件

sed - e ' s / = = > / \ n # # # / g - e ' s / < = = / # # # / g - = = >替换为新行< = = + # # #和# # #

>> "files.txt" -输出所有文件

其他回答

如果你想用其他东西替换那些丑陋的==> <==

tail -n +1 *.txt | sed -e 's/==>/\n###/g' -e 's/<==/###/g' >> "files.txt"

解释:

Tail -n +1 *.txt -输出带头文件夹中的所有文件

sed - e ' s / = = > / \ n # # # / g - e ' s / < = = / # # # / g - = = >替换为新行< = = + # # #和# # #

>> "files.txt" -输出所有文件

如果所有文件都有相同的名称或可以通过find进行匹配,您可以这样做(例如):

find . -name create.sh | xargs tail -n +1

要查找,显示每个文件的路径并对其进行cat。

我用grep来做类似的事情:

grep "" *.txt

它不会给你一个“标题”,而是给每一行加一个文件名前缀。

当有多个输入文件时,more命令将它们连接起来,并将每个文件名作为头文件。

连接到一个文件:

more *.txt > out.txt

连接到终端:

more *.txt | cat

示例输出:

::::::::::::::
file1.txt
::::::::::::::
This is
my first file.
::::::::::::::
file2.txt
::::::::::::::
And this is my
second file.

缺失的awk解是:

$ awk '(FNR==1){print ">> " FILENAME " <<"}1' *