大きな問題があります。次のファイルがあります。
18 13 8 5 3 1.715 2.845 1.046 -5.607 -0.000 0.000
38 34 29 24 3 1.715 2.845 1.046 -5.607 -0.000 0.000
12 14 9 5 3 1.715 2.845 1.046 -5.607 -0.000 0.000
34 29 24 30 3 1.715 2.845 1.046 -5.607 -0.000 0.000
14 9 5 3 3 1.715 2.845 1.046 -5.607 -0.000 0.000
13 8 5 3 3 1.715 2.845 1.046 -5.607 -0.000 0.000
34 29 24 28 3 1.590 4.770 0.000 -6.360 -0.000 0.000
13 8 5 7 3 1.590 4.770 0.000 -6.360 -0.000 0.000
14 9 5 7 3 1.590 4.770 0.000 -6.360 -0.000
7 5 3 6 3 0.628 1.883 0.000 -2.510 -0.000 0.000
7 5 3 4 3 0.628 1.883 0.000 -2.510 -0.000 0.000
7 5 3 2 3 0.979 2.937 0.000 -3.916 -0.000 0.0000.000
14 9 5 8 3 -6.458 0.810 5.682 -0.033 -0.000 0.000
13 8 5 9 3 -6.458 0.810 5.682 -0.033 -0.000 0.000
34 29 24 22 3 -6.458 0.810 5.682 -0.033 -0.000 0.000
etc
gsub を使用して、特定の数字を特定の数字に置き換えます。たとえば、次のようになります。
awk '{ gsub(/1/, "9"); gsub(/2/, "8"); gsub(/3/, "6"); gsub(/4/, "7"); gsub(/5/, "4"); gsub(/6/, "10"); gsub(/7/, "5"); gsub(/82/, "92"); gsub(/83/, "91"); gsub(/84/, "94"); gsub(/85/, "93"); gsub(/86/, "97"); gsub(/87/, "95"); gsub(/88/, "96"); etc.....
print $1, $2, $3, $4 }' proba | tee proba2
ところで質問があります。たとえば、111を45に変更したいので、gsubを使用し、私のドキュメントに45を含めてから、スクリプトでgsubを使用して4を76に変更すると、4が76に変わり、45も765に変わります。 - 私はそんなことをしたくありません。
このコードを試しましたが機能しません
awk '{ gsub(/ 1 /, " 9 "); gsub(/ 2 /, " 8 "); gsub(/ 3 /, " 6 "); gsub(/ 4 /, " 7 "); gsub(/ 5 /, " 4 "); gsub(/ 6 /, " 10 "); gsub(/ 7 /, " 5 "); gsub(/ 8 /, " 23 "); gsub(/ 9 /, " 3 "); gsub(/ 10 /, " 11 "); gsub(/ 11 /, " 12 "); print $1, $2, $3, $4 }' proba | tee proba2
整数を変えたいです。私はし12
たくありません98
。 4つの列($1、$2、$3、$4印刷)の整数を変更したいと思います。たとえば、入力形式:たとえば、22 56 3 75
入力と同じ形式の出力形式35 82 91 5
は問題ありませんが、それほど重要ではありません。 (後で直接フォーマットを編集できます)
答え1
replace.txt
たとえば、代替エントリ、列1の古い値、列2の新しい値を次のように使用してファイルを生成することをお勧めします。
1 9
2 8
3 6
4 7
5 4
6 10
7 5
82 92
83 91
84 94
85 93
86 97
87 95
88 96
データファイルが次のと仮定すると、data.txt
次のAWKスクリプトを使用できます。
awk 'NR==FNR { t[$1]=$2; next;} # fill translation table from first file
{ for(i=1;i<5;i++) { # process columns 1..4
if ($i in t) { # replacement available
$i=t[$i]; # replace field only once
}
}
print $1, $2, $3, $4;
# or if you want all columns:
# $1=$1 # this makes sure unmodified lines get the new format
# print # print all fields after modification
}' replace.txt data.txt
あなたの入力に基づいて、以下が生成されます。
18 13 8 4
38 34 29 24
12 14 9 4
34 29 24 30
14 9 4 6
13 8 4 6
34 29 24 28
13 8 4 5
14 9 4 5
5 4 6 10
5 4 6 7
5 4 6 8
14 9 4 8
13 8 4 9
34 29 24 22
または代替出力を使用してください
18 13 8 4 3 1.715 2.845 1.046 -5.607 -0.000 0.000
38 34 29 24 3 1.715 2.845 1.046 -5.607 -0.000 0.000
12 14 9 4 3 1.715 2.845 1.046 -5.607 -0.000 0.000
34 29 24 30 3 1.715 2.845 1.046 -5.607 -0.000 0.000
14 9 4 6 3 1.715 2.845 1.046 -5.607 -0.000 0.000
13 8 4 6 3 1.715 2.845 1.046 -5.607 -0.000 0.000
34 29 24 28 3 1.590 4.770 0.000 -6.360 -0.000 0.000
13 8 4 5 3 1.590 4.770 0.000 -6.360 -0.000 0.000
14 9 4 5 3 1.590 4.770 0.000 -6.360 -0.000
5 4 6 10 3 0.628 1.883 0.000 -2.510 -0.000 0.000
5 4 6 7 3 0.628 1.883 0.000 -2.510 -0.000 0.000
5 4 6 8 3 0.979 2.937 0.000 -3.916 -0.000 0.0000.000
14 9 4 8 3 -6.458 0.810 5.682 -0.033 -0.000 0.000
13 8 4 9 3 -6.458 0.810 5.682 -0.033 -0.000 0.000
34 29 24 22 3 -6.458 0.810 5.682 -0.033 -0.000 0.000