次のコードを考えてみましょう。
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'
コマンドを使用して最初のフィールドを変更したいと思います$1
。array1
renamed_column
awk
私の試みは使い方に基づいていましたが、うまく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_column
awkスカラー変数に保存v
し、内容をv
awk配列に分割し、各最初のフィールドの値を変更して行ごとに入力し、現在の行によってインデックス付けされたr
内容<<<"$array1"
を追加します。します。r[]
番号はに保存されますNR
。