awkを使用して複数のファイルを処理する方法は?

awkを使用して複数のファイルを処理する方法は?

一般的なケース(Nフォルダ)の解決策が必要です。

私はawkを使ってファイルを処理し、その内容を抽出して変数に入れてからエコーします。

ファイルは次のようになります。

H1 H2 H3 H4 H5 H6 H7 H8 H9
not important
not
not

コードは次のとおりです。

$value1=awk '/H1/ { print $1}' file
$value2=awk '/H1/ { print $2}' file
$value3=awk '/H1/ { print $3}' file
echo $value1
echo $value2
echo $value3

結果は次のとおりです。

H1
H2
H3

私の質問は、同じ形式(正確な内容ではなく同じ形式)のファイルが複数あり、ファイルが異なるフォルダにありますが、名前が同じ場合です。

/folder1
file
/folder2
file
/folder3
file

9つの結果を得るために、このフォルダ内の各ファイルでH1行の最初の3つの値をどのようにエコーできますか?

答え1

あなたがしたいと言ったことをするのに必要なものよりも多くのことをしているようですので、ここで何かを見逃しているのではないかと思います。私が正しく理解したら。

ファイルに含まれる行から最初の3つのフィールド(値)を出力(エコー)することがすべてである場合H1(該当する行が1つしかないと仮定)、何をすべきかは次のとおりです。

awk '/H1/ { $1, $2, $3 印刷 }'入力ファイル

または、3つの別々の行に値を表示するには、

awk '/H1/ { $1 印刷; $ 3印刷} '入力ファイル

複数のファイルに対して同じ結果を得るには、中かっこ拡張を使用して名前をリストします。

awk '/H1/ {$1 印刷; $2 印刷 }' /folder{1,2,3}/file

または、他の答えが示すように、ワイルドカードを使用してください。

awk '/H1/ {$1 印刷; $2 印刷}' /folder? /文書

スクリプトで操作できるように変数に値を割り当てる必要がある場合は、要件をより明確に説明する必要があります。

答え2

説明する例では、次の簡単な操作が機能します。

value1 = $(awk '/H1/ { print $1}' folder?/file)
value2 = $(awk '/H2/ { print $2}' folder?/file)
value3 = $(awk '/H3/ { print $3}' folder?/file)

あなたは得るでしょう:

echo $value1
H1 H1 H1

など。

答え3

これができる

for i in $(awk '/H1/{print "Variable"++x"="$x}' folder?/file); do
    eval $i
done

関連情報