Bash将来自同一目录中不同文件夹的两个文本文件组合在一起
我试图使用Bash将来自同一目录中不同文件夹的两个文本文件组合在一起,bash,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") ou
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
期望的结果
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
您也许可以通过使用
/home/cmccabe/Desktop/s5.2/
中的brace expansion运行下面这样的循环来使事情变得简单
outf="/home/cmccabe/Desktop/s5.2/final.txt"
for f in ./Folder{1,2}/*.txt; do
printf "%s\n" "$(< $f )" >> "$outf"
done
outf=“/home/cmccabe/Desktop/s5.2/final.txt”
对于./Folder{1,2}/*.txt中的f;做
printf“%s\n”$(<$f)>>“$outp”
完成
您可以使用/home/cmccabe/Desktop/s5.2/
中的大括号扩展运行下面这样的循环,使事情变得简单
outf="/home/cmccabe/Desktop/s5.2/final.txt"
for f in ./Folder{1,2}/*.txt; do
printf "%s\n" "$(< $f )" >> "$outf"
done
outf=“/home/cmccabe/Desktop/s5.2/final.txt”
对于./Folder{1,2}/*.txt中的f;做
printf“%s\n”$(<$f)>>“$outp”
完成
您不需要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您不需要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是,每个文件夹中只会出现一个同名文本文件。谢谢:)。是的,每个文件夹中只有一个同名文本文件。谢谢:)。您喜欢printf“%s\n”$(<$f)>>“$outp”
而不是cat“$f”>>“$outp”
的原因是什么?您是否使用printf
来分隔文件之间的newline
?也许cat。。。;echo“>>”$outp“
?只是好奇。@DavidC.Rankin:谢谢你的洞察力!注意不要为此使用任何第三方工具,尤其是cat
。但是你怎么说,“$f>”“$outp”
,它可能只打印文件名no?我同时在思考和键入,这很危险。没有第三方工具是关键。@DavidC.Rankin:总是这样!OP想跳过第二个文件的第一行。你喜欢printf”%s\n“$(<$f)”>“$outp”吗“
而不是类别“$f”>>“$OUT”
?您是否使用printf
来分隔文件之间的newline
?也许cat。。。;echo“>>”$outp“
?只是好奇。@DavidC.Rankin:谢谢你的洞察力!注意不要为此使用任何第三方工具,尤其是cat
。但是你怎么说,“$f>”“$outp”
,它可能只打印文件名no?我在想,同时也在打字——这很危险。没有第三方工具是关键。@DavidC.Rankin:经常发生!OP想跳过第二个文件的第一行。谢谢你们:)。谢谢你们两位:)。