Awk - リレーショナル処理。列の編集内容は、実際の行の3番目の列で指定された他の行番号の列に反映する必要があります。

Awk - リレーショナル処理。列の編集内容は、実際の行の3番目の列で指定された他の行番号の列に反映する必要があります。

awk sed File 1を使用したリレーショナル列の処理--->列の順序が正しくないデータ(中間テストデータを含む古い古いファイル)

mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
Iq4iqnH4UftLgGUSobLeti0hkmdMn7
BlzanDNcIsgru2wNYlO6kDjpuPvs82
eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
YuuRhD5f3xju0RnUCjS66g3X2TNNIj
MpJHtG8FjeErwsh6emcCu7B4bHwCnR
aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
nXgwlL0p8LEWNFGznIy2NUXBWHzZgS

ファイル2 --->同じデータですが最終的な順序です(年間レビュー後の新しいファイルとテスト後の中間データを最終形式に変更)

BlzanDNcIsgru2wNYlO6kDjpuPvs82
CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
Iq4iqnH4UftLgGUSobLeti0hkmdMn7
MpJHtG8FjeErwsh6emcCu7B4bHwCnR
YuuRhD5f3xju0RnUCjS66g3X2TNNIj
aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
nXgwlL0p8LEWNFGznIy2NUXBWHzZgS

問題を説明してください。これからは、Final_resultsファイルに何をしても順序を維持しながら、中間テストファイルに同じ変更を反映したいと思います。

<(cat temp_data | nl) <(cat Final_results) 列の貼り付け

1   CrWSI2eyZZkkYlEbOoHgu2o43tU3xa         3   BlzanDNcIsgru2wNYlO6kDjpuPvs82
2   BlzanDNcIsgru2wNYlO6kDjpuPvs82         5   CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
3   IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7      6   IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
4   Iq4iqnH4UftLgGUSobLeti0hkmdMn7         2   Iq4iqnH4UftLgGUSobLeti0hkmdMn7
5   aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f         8   MpJHtG8FjeErwsh6emcCu7B4bHwCnR
6   YuuRhD5f3xju0RnUCjS66g3X2TNNIj         7   YuuRhD5f3xju0RnUCjS66g3X2TNNIj
7   MpJHtG8FjeErwsh6emcCu7B4bHwCnR         9   aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
8   eqOZRXfdcxHqd26Raqd6ZOtPhoQp33         4   eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
9   mL9A7hajHyuVIQr1HNP7ThYfj9yBUd         1   mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
10  nXgwlL0p8LEWNFGznIy2NUXBWHzZgS         10  nXgwlL0p8LEWNFGznIy2NUXBWHzZgS

必須の関係処理。 3 BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIX ---->File2(上記のコマンドの列2)を変更すると、変更6 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-SUFFIX --->File1(上記のコマンドの列1)が反映されます。

例えば。 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7 テスト前 Fina_results の BlzanDNcIsgru2wNYlO6kDjpuPvs82 です。これで、FinalでBlzanDNcIsgru2wNYlO6kDjpuPvs82に行った操作は、古いファイルのIUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7に反映されるはずです。

問題1希望の出力1

1   CrWSI2eyZZkkYlEbOoHgu2o43tU3xa         3   BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIX
2   BlzanDNcIsgru2wNYlO6kDjpuPvs82         5   CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
3   IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-SUFFIX   6   IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
4   Iq4iqnH4UftLgGUSobLeti0hkmdMn7         2   Iq4iqnH4UftLgGUSobLeti0hkmdMn7
5   aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f         8   MpJHtG8FjeErwsh6emcCu7B4bHwCnR
6   YuuRhD5f3xju0RnUCjS66g3X2TNNIj         7   YuuRhD5f3xju0RnUCjS66g3X2TNNIj
7   MpJHtG8FjeErwsh6emcCu7B4bHwCnR         9   aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
8   eqOZRXfdcxHqd26Raqd6ZOtPhoQp33         4   eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
9   mL9A7hajHyuVIQr1HNP7ThYfj9yBUd         1   mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
10  nXgwlL0p8LEWNFGznIy2NUXBWHzZgS         10  nXgwlL0p8LEWNFGznIy2NUXBWHzZgS

問題2目的の出力2 2番目のファイルを最初のファイルに置き換えます。

貼り付けコマンド出力3を参照してください。 BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIXには3があります。したがって、最初の列の行3を列4の最初の行に変更し、3番目の列に3を変更する必要があります。同様に、出力全体が列を転置し、最終的に変更されたデータを出力します。

1 mL9A7hajHyuVIQr1HNP7ThYfj9yBUd-Suffix
2 Iq4iqnH4UftLgGUSobLeti0hkmdMn7-Suffix
BlzanDNcIsgru2wNYlO6kDjpuPvs82-Suffix
4 eqOZRXfdcxHqd26Raqd6ZOtPhoQp33-Suffix
5 CrWSI2eyZZkkYlEbOoHgu2o43tU3xa-Suffix
6 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-Suffix
7 YuuRhD5f3xju0RnUCjS66g3X2TNNIj-Suffix
8 MpJHtG8FjeErwsh6emcCu7B4bHwCnR-Suffix
9 aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f-Suffix
10 nXgwlL0p8LEWNFGznIy2NUXBWHzZgS-Suffix

##単純化されたデータ(テストソリューション用)

1  Mina_Warren     2  Ayden_Silva
2  Jazlene_Gibbs   4  Quintin_Glover
3  Kaleigh_Farley  1  Callum_Mckay
4  Callum_Mckay    7  Jazlene_Gibbs
5  Finn_Nelson     6  Mina_Warren
6  Ayden_Silva     3  Kaleigh_Farley
7  Quintin_Glover  5  Finn_Nelson

出力(質問1のみ)

1  Mina_Warren--Suffix3     2  Ayden_Silva---Suffix1
2  Jazlene_Gibbs--Suffix1   4  Quintin_Glover--Suffix2
3  Kaleigh_Farley--Suffix6  1  Callum_Mckay--Suffix3
4  Callum_Mckay--Suffix2    7  Jazlene_Gibbs-Suffix4
5  Finn_Nelson--Suffix7     6  Mina_Warren--Suffix5
6  Ayden_Silva--Suffix5     3  Kaleigh_Farley--Suffix6
7  Quintin_Glover--Suffix4  5  Finn_Nelson-Suffix7

(質問1にのみ適用されます。)ここで、接尾辞---は、--->すべての種類の処理、編集、名前変更、置換などを意味します。 n行、4列のすべての処理はn行、2列に反映されます。 ---> ここで、n番目の行は3番目の列から取得されます。

awk Q1のロジック - 最初のレコードを読む。 --$4列を変数に保存し、列3に示されている行番号に移動します。 $ 3 --次に、$ 2列を$ 4で保存された変数に置き換えます。

考える

1  Mina_Warren     2  Ayden_Silva
2  Jazlene_Gibbs   4  Quintin_Glover

3番目の列は関係編集の行番号です。 質問1の論理 1行目を読む ---> Ayde _Silva を変数に保存 ---> 1行目の$ 3に2があるので、2行目に移動 ---> 2行目の処理でJazlene_Gibbsに対して同じことを行います。

期待される出力質問1

Mina_Warren     2  Ayden_Silva--Suffix1
2  Jazlene_Gibbs--Suffix1   4  Quintin_Glover

質問2の論理行1を転置して読み込みます---> Ayde_Silvaを変数に保存します--->行1の$ 3に2があるので、行2に移動します--->今行2でAyde_Silveの処理を使用します Jazlene_Gibbs置き換えるバージョン--->ループ内のすべての行に対してこれを行います。 --->列3と4を削除します。

期待される出力質問2

1  Callum_Mckay--Suffix3     
2  Ayden_Silva--Suffix1   
3  Kaleigh_Farley--Suffix6  
4  Quintin_Glover--Suffix2    
5  Finn_Nelson--Suffix7     
6  Mina_Warren--Suffix5     
7  Jazlene_Gibbs--Suffix4  

試験を終えた

in="$(awk 'END { print NR }' 1)" file
awk -v ty=$in '{for (i=1;i<=ty;i++) NR==$i; var=$4; varb=$3; NR == varb; $2=var; print}' file

しかし、期待どおりに動作しません。私が試したことは=合計レコード数7の次のforループを使用して7回繰り返すことです ---> i ==1 ##goto rrcord 1 - -> store $4 In var, store $3 in varb --> NR==varb ## varbで指定されたレコードに移動します(例:2)。 $ 2をvarに置き換えます。 Loop ---> i = 2レコード2に移動し、同じ

ベストアンサー1

使用CPAPWK:

先月に開発された新製品です。

cppawk前処理、通常のAwkへの入力生成にCプリプロセッサを使用し、Lispなどのリスト処理、高度な反復、およびその他のユーティリティ用のいくつかのライブラリヘッダーが付属しています。

質問1:

#include <cons.h>

BEGIN {
  bag = list_begin()
}

{
  left[$1] = $2
  right[$3] = $4

  leftn[$3] = $1

  bag = list_add(bag, $3)
}

END {
  finlist = list_end(bag)

  dolist (i, finlist)
  {
    left[i] = left[i] "--Suffix" ++suff
    right[i] = right[i] "--Suffix" suff
  }

  dolist (i, finlist)
  {
     print leftn[i], left[leftn[i]], i, right[i]
  }
}

出力:

cppawk -f prob-1.cwk prob-1-data 
1 Mina_Warren--Suffix3 2 Ayden_Silva--Suffix1
2 Jazlene_Gibbs--Suffix1 4 Quintin_Glover--Suffix2
3 Kaleigh_Farley--Suffix6 1 Callum_Mckay--Suffix3
4 Callum_Mckay--Suffix2 7 Jazlene_Gibbs--Suffix4
5 Finn_Nelson--Suffix7 6 Mina_Warren--Suffix5
6 Ayden_Silva--Suffix5 3 Kaleigh_Farley--Suffix6
7 Quintin_Glover--Suffix4 5 Finn_Nelson--Suffix7

質問2:

#include <cons.h>

BEGIN {
  bag = list_begin()
}

{
  left[$1] = $2
  right[$3] = $4

  leftn[$3] = $1

  bag = list_add(bag, $3)
}

END {
  finlist = list_end(bag)

  dolist (i, finlist)
  {
    left[i] = right[i] "--Suffix" ++suff
  }

  dolist (i, finlist)
  {
     print leftn[i], left[leftn[i]]
  }
}

出力:

cppawk -f prob-2.cwk prob-1-data 
1 Callum_Mckay--Suffix3
2 Ayden_Silva--Suffix1
3 Kaleigh_Farley--Suffix6
4 Quintin_Glover--Suffix2
5 Finn_Nelson--Suffix7
6 Mina_Warren--Suffix5
7 Jazlene_Gibbs--Suffix4

おすすめ記事