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,

这可能吗?我已经尝试了一切来Awk接听,2*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 回答