- 论坛徽章:
- 0
|
如何用awk和sed 实现随机访问第n行第n列!
原帖由 "Helen_0702" 发表:
我也有一个问题就是:想随机取一个文件的具体一列和一行,
并想把它按照顺序排列。
要对结果排序可自行加个通道转到sort处理
- awk '
- {
- if ( NR == 1 ) xnum=NF
- if ( NR != 1 ) {
- if ( NF < xnum ) xnum=NF
- }
- for (i=1;i<=NF;i++) array[NR,i]=$i
- next
- }
- END{
- srand()
- while ( 1 == 1 ) {
- x=int(rand()*xnum)+1
- y=int(rand()*NR)+1
- printf ( "x=%2d,y=%2d\t%3s\n",x,y,array[x,y] )
- }
- }' $1
复制代码
TEST
- [root@bbhome test]# cat file
- 1 2 3 4 5 6 7 8 9 10
- 11 12 13 14 15 16 17 18 19 20
- 21 22 23 24 25 26 27 28 29 30
- 31 32 33 34 35 36 37 38 39 40
- 41 42 43 44 45 46 47 48 49 50
- 51 52 53 54 55 56 57 58 59 60
- 61 62 63 64 65 66 67 68 69 70
- 71 72 73 74 75 76 77 78 79 80
- 81 82 83 84 85 86 87 88 89 90
- 91 92 93 94 95 96 97 98 99 100
- [root@bbhome test]# temp2 file
- x= 6,y= 7 57
- x= 2,y= 7 17
- x= 1,y= 6 6
- x= 4,y=10 40
- x= 1,y= 1 1
- x= 1,y= 6 6
- x= 4,y=10 40
- x=10,y= 2 92
- x= 7,y= 2 62
- x= 2,y= 2 12
- x= 4,y= 9 39
- x=10,y= 8 98
- x= 8,y= 2 72
- ...................
复制代码
矩阵文件生成代码
- [root@bbhome test]# cat temp
- awk '
- BEGIN{
- for (i=1;i<=100;i++) {
- printf ("%2d ",i)
- if ( i%10 == 0 ) printf("\n")
- }
- }'
复制代码 |
|