正在寻找如何将文件名附加为文件每行的第一个字符串的帮助。
只有内容的文件。我试图合并两个文件,但内容应该是第一个字符串作为文件名,然后是第1行。等等。让我们考虑两个名为FileA和FileB的文件。文件A有2行,文件B有2行。
FileA
Tom is Cat
Jerry is Mouse
FileB
Cat is Tom
Mouse is Jerry
合并文件的预期输出
FileA Tom is Cat
FileA Jerry is Mouse
FileB Cat is Tom
FileB Mouse is Jerry.
我正在努力寻找解决这个问题的办法。请帮助
使用sed
替换文件每行开头的文件名:
sed 's/^/FileA /' fileA >> mergedFile
sed 's/^/FileB /' fileB >> mergedFile
对于任意数量的文件,可以在所有文件名上循环,并使用带有文件名的变量动态构造sed
替换命令。
while read -r f
do
sed "s|^|$f |" "$f"
done < file.txt > merge.txt
使用awk
和大括号展开。
awk '{print FILENAME, $0}' file{A,B} | tee mergefile
文件名可以是任何东西,如果不是这样的话,只需将它们作为awk
的参数
awk '{print FILENAME, $0}' filefoo filebar filemore ...
如果您的grep
具有-H
选项/标志,也可以使用grep
grep -H . fileA fileB
同样,文件名可以是任何东西。
使用tee
将输出发送到stdout
和合并文件。
如果您更喜欢ripgrep
而不是grep
,这两个命令会产生相同的输出:
$ grep --with-filename '' File*
$ rg --with-filename --no-heading --no-line-number '' File*
FileA:Tom is Cat
FileA:Jerry is Mouse
FileB:Cat is Tom
FileB:Mouse is Jerry