word-word2-word3-word4.txtという名前のファイルを保存します。 「単語数」の量は文書によって異なります。
いくつかのダッシュをword+word2-word3+word4.txtのようなプラス記号に置き換えたいと思います。
数字を入力して変更するダッシュ記号またはマイナス記号を指定したいと思います。
動作しない厄介なスクリプトがあります。そのスクリプトの役割は次のとおりです。
- ダッシュは後で awk 分割の目的でセミコロンで補完されます。
- ユーザーは、置き換えるダッシュを指定するために数字を入力します。
- ファイル名の末尾に数字が追加されます(例:aaa-;bbb-;ccc.txt 1 3)。
- そして処理のためにawkにパイプしてください。
- awkで追加された数値の配列を作成し、
- 最初のフィールドが分割された単語の配列
- 次に、数値配列を使用してパーティション配列のインデックスを指定し、 '+'にgsub ';'を使用します。
簡単な操作と実験のためにファイル名をハードコードする恐ろしいスクリプトは次のとおりです。 awkスクリプトを効率的に終了する方法がわかりません。計画は awk を終了し、sed で最終置換を実行することです。
これは学習が不十分なDog's Dinnerスクリプトであることは明らかです。それにもかかわらず望んでいるなら、どんな助けでもくれてありがとう。
file='wot-;wit-;wet-;wat.txt';
echo -n "type digits";
read nos; varr=$(echo $nos);
newfile=$(echo $file $varr);
echo "$newfile" | awk '{ for (i=2; i<=NF ;i++) arr[i]=$i}
END{ split($1,spl,"-");
for( var in arr ) gsub(";","+", spl[var]);
print THIS IS NOT WORKING - CAN'T GET ANYTHING USEFUL OUT }'
答え1
よくわかりませんが、+awk
方法は知っています。shell
sed
file='wot-;wit-;wet-;wat.txt';
echo -n "type digits : ";
read nos;
# this is used to sort numbers in order, otherwise the script
# will work only when user specifies numbers in right order
# also we delete all non-numbers string to make sed code safe enough
nos="$(echo $nos|tr ' ' '\n'|sort -n|grep -v '[^0-9]'|tr '\n' ' ')"
# here we build sed code and modify the text
echo "$file" | { for i in $nos ; do A="s/-/+/$i;$A" ; done ; sed "$A" ; }