如何从一个文件中读取文件名,并将文件名和内容存储到另一个文件中,|”“是的。
我有一个名为Filenames.txt的文件,其中存储了文本文件的名称。
> Cat Filenames.txt
File1.txt
File2.txt
File3.txt
> Cat File1
This is content of File1
> Cat File2
This is content of File2
> Cat File3
This is content of File3
所有这些文件Filenames.txt、File1.txt、File2.txt、File3.txt都存储在名为TestDir的目录中。
我的预期输出如下,生成一个新的文件在下面的格式.
> Cat Outputfile.txt
File1|This is content of File1
File2|This is content of File2
File3|This is content of File3
我尝试了下面的代码,得到了一些错误,
#!usr/bin/env bash
file=$(cat Filenames.txt)
y=$(pwd)
for line in $file
do
x=$(cat "${line}")
echo -e "${line}"|"${x}" >> Outputfile.txt
done
低于误差,
$ bash Script.sh
cat: 'file1.txt'$'\r': No such file or directory
Script.sh: line 7: : command not found
cat: 'file2.txt'$'\r': No such file or directory
Script.sh: line 7: : command not found
Script.sh: line 7: This is content of File3: command not found
电流输出:
test1_file
|
test2_file
|
test3_file|
注意:我在Window机器中使用了Bash shell
请帮帮我问候,Sooraj
3条答案
按热度按时间5anewei61#
首先,你需要删除
CRLF
windows行结束:然后,我会做什么:
你的shebang
#!usr/bin/env bash
是错误的,缺少usr
上的前导/
。我的版本是简化的,基于你的代码。
要逐行解析文件,不要使用
for loop
,读取https://mywiki.wooledge.org/BashFAQ/001kq0g1dla2#
修复
Filenames.txt
中的Windows行结束问题后(请参阅Why does my tool output overwrite itself and how do I fix it?),请尝试以下操作:pn9klfpd3#
关于Ruby:
关于Bash:
两者都打印:
任何一个都可以通过以下方式重定向到所需的文件:
如果你的文件名在一个文件中,你可以做:
(In Ruby,
\R
是通用的,无论行尾如何都可以工作。在Bash中: