セミコロンで区切られたこのcsvファイルがあります。 8番目のフィールドの最初の項目である1を77に変更したいと思います。ただし、awk コマンドはフィールド 8 のすべての 1 を 77 に置き換えます。私は何をすべきですか?
オリジナルCSV
1;abc;1;;;;;1;;1;;1;;;;;1;;;1;;
2;def;1;;;;;1;1;1;;;;;1;;;;1;;;
3;ghi;1;;;;1;1;1;1;;1;;1;1;;;;;1;;
4;jkl;1;;;;;1;;1;;1;1;;;1;;;;1;;
私はこれを試しました
awk 'BEGIN{FS=OFS=";"} {sub(1, 77, $8)} {print}' ser.csv > tmp.csv
私はこれを期待していた
1;abc;1;;;;;77;;1;;1;;;;;1;;;1;;
2;def;1;;;;;1;1;1;;;;;1;;;;1;;;
3;ghi;1;;;;1;1;1;1;;1;;1;1;;;;;1;;
4;jkl;1;;;;;1;;1;;1;1;;;1;;;;1;;
しかし、私はそれを理解しています。
1;abc;1;;;;;77;;1;;1;;;;;1;;;1;;
2;def;1;;;;;77;1;1;;;;;1;;;;1;;;
3;ghi;1;;;;1;77;1;1;;1;;1;1;;;;;1;;
4;jkl;1;;;;;77;;1;;1;1;;;1;;;;1;;
答え1
「最初の出現」が「フル入力からの最初の出現」を意味すると仮定すると、これはおそらくawk(テストされていない)で望むものです。
awk 'BEGIN{FS=OFS=";"} !f && sub(1, 77, $8){f=1} {print}'
上記は、1
すべての入力で最初に表示されるフィールド8を置き換えます。代わりに、すべての入力で最初の8番目のフィールドを1の値に置き換えるには、次のようになります(または類似)。
awk 'BEGIN{FS=OFS=";"} !f && ($8==1){$8=77; f=1} {print}'