Solaris:awkでシステムコマンドを実行し、すべての出力を1行にまとめる方法

Solaris:awkでシステムコマンドを実行し、すべての出力を1行にまとめる方法

以下の形式で指定されたディレクトリのファイルを印刷するには、特別な要件があります。

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()もともと同じように使用しないものも含めて)。

おすすめ記事