我正在尝试使用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
答案 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