forループを使用してフォルダ内のすべてのファイル(ファイル名を含む)をキャプチャしますか?

forループを使用してフォルダ内のすべてのファイル(ファイル名を含む)をキャプチャしますか?

この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/' ./*

おすすめ記事