Cat命令不会合并脚本中的文件

时间:2012-05-14 11:28:37

标签: file merge cat

我不确定在以下情况下我做错了什么 - 我想将多个文件合并为一个,但我想合并其中很多,所以我想使用这样的东西:

*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放在输入文件的每一行的开头,但它也不能正常工作。

我想这是一个简单的错误,但我无法找到解决方案。

感谢您的帮助。

4 个答案:

答案 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使用空格分隔符,你必须保留一个计数器来知道该行是否真的结束了。 所以我们正在使用kk = 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)。