0

わかりました、これがばかげた質問ではないことを願っていますが、それが役立つ場合は、すでにイライラするほど一生懸命答えを探しました...私がawk取り組んでいる次の表現があります:

awk '{str="";a=0;while (a++<15) str=str "0,";{ sub(/^.{6}/,"&" "1,",str) }; print str}' sample.txt

Sample.txtは任意のテキスト ファイルにすることができますが、この時点では繰り返しを実行するだけなので問題ありません (目的を達成するための手段であることを願っています)。出力は次のようになります (もちろん、Sample.txt ファイルの行数によって異なります)。

0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,

しかし、私が本当にやりたいことは次のようなものです:

awk '{str="";a=0;while (a++<15) str=str "0,";{ sub(/^.{2*NR-1}/,"&" "1,",str) }; print str}' sample.txt

次のような出力が生成されます。

1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,

これは可能ですか?を手に入れるためにあらゆることを試しましAwk2*NR-1が、何もうまくいかないようです... 何が間違っていますか?

テリー

4

2 に答える 2

2

あなたが試みている方法はかなり面倒に見えます。このように使用することを検討しawkましたか?

awk '{ for (i=1; i<=15; i++) printf (NR == i) ? "1," : "0,"; printf "\n" }' file.txt
于 2012-09-29T01:50:11.463 に答える
1

また、coreutils、sed、および bash を組み合わせて使用​​することもできます。

s=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
seq 16 | while read; do sed 's/0/1/'$REPLY <<< $s; done
于 2012-09-29T09:25:14.273 に答える