Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash将来自同一目录中不同文件夹的两个文本文件组合在一起_Bash - Fatal编程技术网

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想跳过第二个文件的第一行。谢谢你们:)。谢谢你们两位:)。