いくつかのファイル(.v.gz)があります。ファイルに存在するデータは次のとおりです。
通事論:
module **module_name**(out, In, clk, rst )
statement 1
statement 2
:
:
statement n
endmodule
実際のデータは
文書
module mod_reg_lif(out, In, clk, rst ) #
statement 1
statement 2
:
:
statement n
endmodule
module
dff_reg_net(out, In, clk, rst )
statement 1
statement 2
:
:
statement n
endmodule
module
dat_log_out (out, In, clk, rst )
statement 1
statement 2
:
:
statement n
endmodule
module rest_wire_lib (out, In, clk, rst )
statement 1
statement 2
:
:
statement n
endmodule
実際のファイルには、同様の種類の複数のデータが含まれています。
module switch(in1, datainready1, atainready)
always @(posedge clk)
begin
if (reset == 1)
begin
counter<= 0;
datainreadyl<= 0;
if(counter ==0)
dataoutready<= 0;
end
endmodule
ここで、スイッチはモジュール名です。
上記の例では、module_namesが次のようになっていることを確認してください。mod_reg_lif, dat_log_out, dff_reg_net, Rest_wire_lib,
検討した後基準寸法〜のように モジュール名(同じ行または次の行に)まで(同じ行または次の行にある場合、これが発生します。出力では、私は次のモジュール名が欲しい。
mod_reg_lif
dat_log_out
dff_reg_net
rest_wire_lib
私が得た結果は何ですか?
mod_reg_lif
rest_wire_lib
moduleとmodule_nameの両方が同じ行にあるため、出力に記載されているすべてのデータを取得できません。
私のバッシュコードは
for file in *.v.gz;
do
zgrep -A1 "^module" "$file" | sed -n -e 's/^\(module \)*\(.*(.*)\).*$/\2/p' | cut -f1 -d"(" > $(basename "$file" .v.gz).txt
done
私を修正してくださいsed -n -e 's/^(モジュール)(。(。)).$/\2/p'コマンドを修正する方法がわかりません。
ps:問題について質問がある場合はコメントを残してください。
ベストアンサー1
おそらくこれはあなたが望むものでしょう。 GNU awkを使用して複数文字、RS
単語の境界を表し、略語を使用します。RT
\<
\s
[[:space:]]
$ zcat *.v.gz | awk -v RS='\\<module\\s+[^[:space:](]+' 'RT{$0=RT; print $2}'
mod_reg_lif
dff_reg_net
dat_log_out
rest_wire_lib