如何让猫开始新的一线

时间:2014-07-30 06:27:55

标签: bash unix

我有四个文件:

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

任何想法如何正确有效地做到这一点,以便每个人最终都在自己的路线上?实际上,我需要对很多非常大的文件执行上述操作。提前感谢您的帮助。

6 个答案:

答案 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