如何将多个文本文件附加在一起然后拆分?

时间:2019-02-11 16:37:07

标签: bash

我正在尝试将文本文件与文件名一起附加,然后将它们分开。

我已经可以使用tail附加文件,但是不确定这是否是最好的方法。

Discovery status

如何将allFiles拆分回原始文件?

2 个答案:

答案 0 :(得分:2)

最隐秘的可能是grep,因为它会将文件名附加到每一行。

bash$ grep ^ one two three /dev/null
one:first line
one:
one:^ empty line
two:
three:^ look, two only contained one empty line
three:this one contains three lines, too
three:quod erat demonstrandum.

将它们拆回是Awk的一项琐碎任务:

awk -F : '$1 != p { if(p) close(p) }
    { print substr($0,length($1)+1 >$1
        p=$1 }' combined.txt

/dev/null参数中添加grep以确保它总是获得比单个文件名更多的参数,这是一个老办法。您当然可以在任何远程现代系统上使用grep -H来达到相同的效果。

答案 1 :(得分:0)

要分割文件,您可以使用splitcsplit实用程序,以加入文件join

如何使用join?也许像下面这样:

$ cat a.txt
ala
ola
ewa
$ cat b.txt
ula
ewa
$ (echo -e "\n";cat a.txt)|awk 'BEGIN{s=0;}{print NR+s" "$0}'
1
2
3 ala
4 ola
5 ewa
$ (echo -e "\n";cat a.txt)|awk 'BEGIN{s=0;}{print NR+s" "$0}'>a1.txt
$ (cat b.txt;echo -e "\n\n")|awk 'BEGIN{s=0;}{print NR+s" "$0}'
1 ula
2 ewa
3
4
5
$ (cat b.txt;echo -e "\n\n")|awk 'BEGIN{s=0;}{print NR+s" "$0}'>b1.txt
$ join a1.txt b1.txt|awk '{$1="";print}'|sed 's/ //g'
ula
ewa
ala
ola
ewa