awkでgsubを使用する

awkでgsubを使用する

以下で入力ファイル(file1とfile2)を見つけて、file3に出力をインポートします。

awkで-GSUBを使用してください

ファイル1:

000000018*A00045425530
000000022*A00002122779
000000032*A00051046521
000000035*A00008977353
000000052*A00050659539

ファイル2:

A00045425530 *204***204***0.01**********1**1*****18**0****1***********0.01***0**0***0                    (EOR)
A00020515159 *6071***6071*************1**1*****26**0****1***0*0**0***0*****0**0***0                    (EOR)
A00002122779 *****************1*************1****************0***0                    (EOR)
A00002293889 ********************************************0**0***0                    (EOR)
A00008977353 *****************1*************1****************0***0                    (EOR)

AGN(ファイル1のフィールド2とファイル2のフィールド1)を一致させ、awkのgsubを使用して一致する出力から「(EOR)」をnullに削除します。出力は次のようになります。

ファイル3出力:

A00045425530 *204***204***0.01**********1**1*****18**0****1***********0.01***0**0***0
A00002122779 *****************1*************1****************0***0
A00008977353 *****************1*************1****************0***0

ベストアンサー1

awk 'NR==FNR{ a[$2] }
  NR!=FNR && $1 in a{
    gsub(/\s+\(EOR\)/, "")
    print
  }
' FS='*' file1 FS=' ' file2 > file3

最初のファイルを読み取るときにそれを*入力フィールド区切り文字として使用し、2番目のフィールドを配列のインデックスa(NULL値を含む)として使用します。
2番目のファイルを読み取るときは、スペース文字を入力フィールド区切り文字として使用し、最初のフィールドが配列のインデックスとして存在するかどうかをテストしますa。条件が true の場合、(EOR)次の空白文字をすべて空の文字列に置き換え、現在の行を印刷します。出力がにリダイレクトされますfile3

おすすめ記事