次のステートメントを含むファイルがあります。
myName_tx_1 VARCHAR(255)
myName_in_1 VARCHAR(255)
myName_tx_2 VARCHAR(255)
myName_in_2 VARCHAR(255)
myName_tx_3 VARCHAR(255)
myName_in_3 VARCHAR(255)
myAddress_tx_1 VARCHAR(255)
myAddress_in_2 VARCHAR(255)
etc
私はそれを次のように変更したいと思います:
myName_tx_1 VARCHAR(255)
myName_in_1 VARCHAR(1)
myName_tx_2 VARCHAR(255)
myName_in_2 VARCHAR(1)
myName_tx_3 VARCHAR(255)
myName_in_3 VARCHAR(1)
myAddress_tx_1 VARCHAR(255)
myAddress_in_2 VARCHAR(1)
etc
とにかく、追加の質問は、属性名が「in $」で終わる項目だけを変更したいということです。ここで $ は数値です (例: myName_in_3 VARCHAR(255))。
偶然にも '_in' (インディケータ属性) がペアで出てくるので、n~2 (または FNR%2==0) を実行するのはかなり賢い方法ですが、 '_in$VARCHAR(' を識別する方が良いかどうか疑問に思います。 ?255 )'を変化のモデルにしている。
わかりやすいコードを使用してこれをどのように実行しますか?ファイルが大きくないため、パフォーマンスは大きな問題にはなりません。
ベストアンサー1
first~step
GNU sedを使用すると、2行目から始まる他のすべての行が変更されるようにフォーマットで行アドレスを指定できます2~2
。
$ sed '2~2 s/(255)/(1)/' file
myName_tx_1 VARCHAR(255)
myName_in_1 VARCHAR(1)
myName_tx_2 VARCHAR(255)
myName_in_2 VARCHAR(1)
myName_tx_3 VARCHAR(255)
myName_in_3 VARCHAR(1)
myAddress_tx_1 VARCHAR(255)
myAddress_in_2 VARCHAR(1)