我有四个文件:
one_file.txt
abc | def
two_file.txt
ghi | jkl
three_file.txt
mno | pqr
four_WORD.txt
xyz| xyz
我想连接所有以“file.txt”结尾的文件(即除了four_WORD.txt以外的所有文件)以获取:
abc | def
ghi | jkl
mno | pqr
为实现这一目标,我运行:
cat * file.txt> full_set.txt
然而,full_set.txt出现为:
abc | defmno | pqrghi | jkl
任何想法如何正确有效地做到这一点,以便每个人最终都在自己的路线上?实际上,我需要对很多非常大的文件执行上述操作。提前感谢您的帮助。
答案 0 :(得分:6)
尝试:
awk 1 *file.txt > full_set.txt
裸 cat
的效率较低,但如果在每个文件末尾丢失,则会额外添加\n
答案 1 :(得分:0)
如果缺少新行,很多工具都会添加换行符。试试,例如。
sed '' *file.txt >full_set.txt
但这取决于您的sed
版本。其他人尝试包括Awk,grep -ho '.*' file*.txt
等等。
答案 2 :(得分:0)
这对我有用:
for file in $(ls *file.txt) ; do cat $file ; echo ; done > full_set.txt
我希望这会对你有所帮助。
答案 3 :(得分:0)
你可以循环遍历每个文件并检查最后一行是否以新行结束,如果没有,则输出一行。
for file in *file.txt; do
if [[ $(tail -n 1 "$file") != *[\x0a] ]]; then
cat "$file"
echo
else
cat "$file"
fi
done > full_set.txt
答案 4 :(得分:-1)
find . -name "*file.txt" | xargs cat > full_set.txt
答案 5 :(得分:-1)
您可以使用一行for
循环。以下一行:
for f in *_file.txt; do (cat "${f}") >> full_set.txt; done
产生所需的输出:
$ cat full_set.txt
abc | def
mno | pqr
ghi | jkl
此外,可能duplicate。