我不确定在以下情况下我做错了什么 - 我想将多个文件合并为一个,但我想合并其中很多,所以我想使用这样的东西:
*input file* that contains lines
file1.txt >> mergedfiles1.txt
file2.txt >> mergedfiles1.txt
file3.txt >> mergedfiles2.txt
file4.txt >> mergedfiles2.txt
...
如果我像往常一样尝试使用简单的脚本
cat *input file* | while read i
do
cat $i
done
它实际上不合并文件,但是写
*content* of file1.txt
cat: >> : file does not exist
cat: mergedfiles1.txt : file does not exist
我试图将命令cat放在输入文件的每一行的开头,但它也不能正常工作。
我想这是一个简单的错误,但我无法找到解决方案。
感谢您的帮助。
答案 0 :(得分:1)
您可以这样使用cat合并三个文件:
cat file1 file2 filet3 > merged_files
答案 1 :(得分:0)
你需要像这样使用它
cat input_file > output file
答案 2 :(得分:0)
那是因为bash将空格视为行分隔符。
所以你必须管理这件事。
实际上,您可以从输入文件中删除>>
并执行以下操作:
k=0
for line in $(cat inputFile); do
if [ $k -eq 0 ]; then
src=$line
let k=$k+1
else
cat $src>>$line
k=0
fi
done
我的上一个bash脚本已经有一段时间了,但逻辑非常简单。
由于bash使用空格分隔符,你必须保留一个计数器来知道该行是否真的结束了。
所以我们正在使用k
。
k = 0
意味着我们在行的前半部分,因此我们需要将文件名存储到var(src
)中。
当k
为1时,表示我们处于行的最后一半,因此我们实际上可以执行cat
命令。
如果你的文字是这样的话,我的代码就可以了:
file1.txt mergedfiles1.txt
file2.txt mergedfiles1.txt
file3.txt mergedfiles2.txt
file4.txt mergedfiles2.txt
答案 3 :(得分:0)
我不太确定你想做什么,但认为这个例子可能会有所帮助:
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for file in *
do
echo "$file"
done
IFS=$SAVEIFS
IFS的操作是这样你可以选择并处理空间分离的文件,这些文件在Windows报告中更常见 - 至少从我的经验来看 - Linux(Unix)。