Bash将来自同一目录中不同文件夹的两个文本文件组合在一起

时间:2017-05-17 17:26:20

标签: bash

我正在尝试使用bash来合并同一目录中不同文件夹中两个文本文件的内容。下面的确执行但会产生下面的当前输出。希望它很接近,但我不确定为什么它没有产生所需的输出。谢谢你:)。

的bash

topdir=/home/cmccabe/Desktop/s5.2
dir1=/home/cmccabe/Desktop/s5.2/Folder1
dir2=/home/cmccabe/Desktop/s5.2/Folder2
for f in $dir1/*.txt
do
$(basename "$f")
outf=$topdir/all.txt
cp $f $outf
sed -e '1 d' $dir2/*.txt >> $outf
done

目录布局说明:

toplevel directory `/home/cmccabe/Desktop/s5.2`
   |
Folder1   Folder2 `/home/cmccabe/Desktop/s5.2/Folder1` or `/home/cmccabe/Desktop/s5.2/Folder2`
   |         |
 .txt      .txt   `$dir1.txt` or `$dir.txt`

来自dir1的文本文件的内容

xxx_000 00-0000_La-Fi
xxx_001 00-0001_L-F
xxx_002 00-0002_xx-xxx
R_2017_SomeName

xx_0000 xxx
xx_0001 xxx1
xx_0002 xxx2
xx_0003 xxx3
R_2017_SomeName

来自dir2的文本文件的内容

xxx_006 00-0000_La-Fi
xxx_007 00-0001_L-F
xxx_008 00-0002_xx-xxx
R_2017_SomeName

当前输出

file1.txt command not found in the terminal but `all.txt` is created and looks like:

xxx_000 00-0000_La-Fi
xxx_001 00-0001_L-F
xxx_002 00-0002_xx-xxx
R_2017_SomeName

xx_0000 xxx
xx_0001 xxx1
xx_0002 xxx2
xx_0003 xxx3
R_2017_SomeName  --- not carrying over the newline ---
xxx_007 00-0001_L-F
xxx_008 00-0002_xx-xxx
R_2017_SomeName

期望的结果

xxx_000 00-0000_La-Fi
xxx_001 00-0001_L-F
xxx_002 00-0002_xx-xxx
R_2017_SomeName

xx_0000 xxx
xx_0001 xxx1
xx_0002 xxx2
xx_0003 xxx3
R_2017_SomeName

xxx_006 00-0000_La-Fi
xxx_007 00-0001_L-F
xxx_008 00-0002_xx-xxx
R_2017_SomeName

2 个答案:

答案 0 :(得分:2)

你可以通过使用id中的大括号展开来运行如下所示的循环来简化事情

/home/cmccabe/Desktop/s5.2/

答案 1 :(得分:1)

您不需要for循环。

topdir=/home/cmccabe/Desktop/s5.2
dir1=/home/cmccabe/Desktop/s5.2/Folder1
dir2=/home/cmccabe/Desktop/s5.2/Folder2
outf=$topdir/all.txt
cp $dir1/*.txt $outf
# The question is not complete clear to me,
# the next echo can be deleted when you do not want an empty line
echo >> $outf
sed -e '1 d' $dir2/*.txt >> $outf

cat $dir1/*.txt <(echo) <(sed -e '1 d' $dir2/*.txt) > $outf