シェル変数を使用してあるフィールドを別のフィールドに置き換える方法は?

シェル変数を使用してあるフィールドを別のフィールドに置き換える方法は?

次のコードを考えてみましょう。

renamed_column='2
6
10
8
22
20
6-
18
8-
12
16'

array1='2 0.00000 -1.45191
6 0.81778 -0.63413
10 0.85020 -0.60170
8 1.40260 -0.04931
22 3.25781 1.80590
20 4.32051 2.86860
6 0.00000 -0.93906
18 0.07618 -0.86288
8 0.36922 -0.56984
12 0.71195 -0.22711
16 0.88517 -0.05389'

コマンドを使用して最初のフィールドを変更したいと思います$1array1renamed_columnawk

私の試みは使い方に基づいていましたが、うまくawk -v v="$renamed_column" '{$1=v; print $0}' <<< "$array1"いきません。

希望の出力は次のとおりです。

2 0.00000 -1.45191
6 0.81778 -0.63413
10 0.85020 -0.60170
8 1.40260 -0.04931
22 3.25781 1.80590
20 4.32051 2.86860
6- 0.00000 -0.93906
18 0.07618 -0.86288
8- 0.36922 -0.56984
12 0.71195 -0.22711
16 0.88517 -0.05389

ベストアンサー1

$ awk -v v="$renamed_column" 'BEGIN{split(v,r)} {$1=r[NR]} 1' <<<"$array1"
2 0.00000 -1.45191
6 0.81778 -0.63413
10 0.85020 -0.60170
8 1.40260 -0.04931
22 3.25781 1.80590
20 4.32051 2.86860
6- 0.00000 -0.93906
18 0.07618 -0.86288
8- 0.36922 -0.56984
12 0.71195 -0.22711
16 0.88517 -0.05389

もちろん、これを行う他の方法もたくさんあります。上記は、元のコマンドを最小限に変更して実行する方法を示しています。

上記はシェルスカラー変数の内容をrenamed_columnawkスカラー変数に保存vし、内容をvawk配列に分割し、各最初のフィールドの値を変更して行ごとに入力し、現在の行によってインデックス付けされたr内容<<<"$array1"を追加します。します。r[]番号はに保存されますNR

おすすめ記事