![awk 1行スクリプトをスタンドアロンスクリプトに変換するには? [閉鎖]](https://linux33.com/image/76167/awk%201%E8%A1%8C%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89%E3%82%A2%E3%83%AD%E3%83%B3%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
awk
この1行のコードをスタンドアロンスクリプトでどのように書き換えることができますか?仕組みを理解するのに役立つように、読みやすさを高めたいと思います。
awk 'BEGIN{FS=OFS=";"} NR==FNR{for(i=2;i<=7;i++) if($i!="\"\"") a[$1]=a[$1] FS $i;next} {n=split(a[$1],f,FS); if(n>7)n=7; for(i=2;i<=n;i++) $i=f[i]}1' csv{,}
答え1
構文が選択解除され、選択解除されているので、それが何をしているのか、機能しているのかわかりません。私は1行のコードをスタンドアロンのawkスクリプトに再フォーマットし、読みやすさを高めるためにスペースを追加しました。元の行が機能していた場合は、これも機能します。そうでなければそうではありません。
#! /usr/bin/awk -f
BEGIN {FS=OFS=";"}
NR==FNR {
for(i=2;i<=7;i++) if($i!="\"\"") a[$1]=a[$1] FS $i;
next
}
{
n=split(a[$1],f,FS);
if(n>7)n=7;
for(i=2;i<=n;i++) $i=f[i]
}
1
ファイル(たとえばmyscript.awk
)に保存し、実行可能にしてから(chmod +x myscript.awk
)実行します。
./myscript.awk csv{,}