Solaris: awk 위에서 시스템 명령을 실행하고 모든 출력을 한 줄로 결합하는 방법

Solaris: awk 위에서 시스템 명령을 실행하고 모든 출력을 한 줄로 결합하는 방법

아래에 언급된 형식으로 지정된 디렉터리의 파일을 인쇄하려면 특별한 요구 사항이 있습니다.

filename1 <type of file> owner group
filename2 <type of file> owner group
$

열 사이의 구분 기호는 탭 문자입니다.

다음 명령을 작성할 수 있었지만 system명령의 출력에는 피하고 싶은 새로운 줄이 소개됩니다.

find . -type f | xargs -I{} ls -let {} | awk -F" " 'BEGIN{OFS="\t" ORS=":"} {cmd=sprintf("file \"%s\"", $10);system(cmd);print $3,$4}'| tr -s ':\t ' '\t'

생성된 출력은 다음과 같습니다.
filename1 <type of file>
owner group filename2 <type of file>
owner group $

나는 그 system명령이 내가 피하고 싶은 새로운 줄을 담당한다는 것을 알고 있습니다. 같은 이유로 ORS를 사용하고 있지만 운이 없습니다.
어떤 도움이라도 대단히 감사하겠습니다.

답변1

명령에서 파이프 I/O를 사용할 수 있습니다 awk(적어도 gawkSolaris에서는 테스트하지 않았습니다).

find . -type f | xargs ls -l | awk 'BEGIN { OFS="\t" } { command=sprintf("file \"%s\"", $9); command | getline type; close(command); print type, $3, $4 }' | tr ":" "\t"

지원 하면 find단순화할 수 있습니다.

find . -type f -ls | awk ...

편리한 점이 있습니다리소스 사용getline여기에는 해야 할 일과 하지 말아야 할 일이 많이 포함되어 있습니다( close()원래 했던 것처럼 사용하지 않는 것을 포함하여).

관련 정보