通过直接在 shell 中执行的这个 for 循环,我可以捕获文件夹中所有文件的内容,并在其旁边显示值:
$ for f in *; do echo -e "\t"$f"\n"; cat $f; done
输出示例:
100
testfile1
testfile3 <-No output because this file is empty
hello
testfile2
但我想打印右侧的值和左上角的文件,如下所示:
testfile1
100
testfile3
testfile2
hello
我尝试交换 echo 和 cat 的位置,但这不起作用,它的工作原理与其他命令完全相同。
$ for f in *; cat $f; do echo -e "\t"$f"\n"; done
我怎样才能实现这个目标?
答案1
for f in *; do
printf '%s\n' "$f"
paste /dev/null - < "$f"
done
将打印文件名,后跟其内容,对于目录中的每个文件,每行前面都有一个制表符。
与 GNU 相同awk
:
gawk 'BEGINFILE{print FILENAME};{print "\t" $0}' ./*
或者避免打印空文件的名称(这不是 GNU 特定的):
awk 'FNR==1 {print FILENAME}; {print "\t" $0}' ./*
或者使用 GNU sed
:
sed -s '1F;s/^/\t/' ./*
答案2
for f in *; do echo -e "$(cat $f)\t"$f; done
答案3
我找到了一个可能的解决方案:
for f in *; do echo -e $f"\n\t$(cat $f)"; done