この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