이 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