awk打印给定范围的列

时间:2012-04-24 20:58:59

标签: awk tabular

我的数据如下:

0.000000 0.071429 0.071429 0.857143 
0.071429 0.428571 0.071429 0.428571 
0.357143 0.214286 0.357143 0.071429 
0.000000 0.714286 0.000000 0.285714 
0.000000 0.571429 0.000000 0.428571 
0.428571 0.357143 0.071429 0.142857 
0.000000 0.071429 0.071429 0.857143 
0.071429 0.000000 0.928571 0.000000 
0.000000 0.071429 0.000000 0.928571 
0.000000 0.285714 0.000000 0.714286 
0.142857 0.000000 0.785714 0.071429 

我希望它看起来像那样:

AC name_of_the_file.txt
00 0.000000 0.071429 0.071429 0.857143 
01 0.071429 0.428571 0.071429 0.428571 
02 0.357143 0.214286 0.357143 0.071429 
03 0.000000 0.714286 0.000000 0.285714 
04 0.000000 0.571429 0.000000 0.428571 
05 0.428571 0.357143 0.071429 0.142857 
06 0.000000 0.071429 0.071429 0.857143 
07 0.071429 0.000000 0.928571 0.000000 
08 0.000000 0.071429 0.000000 0.928571 
09 0.000000 0.285714 0.000000 0.714286 
10 0.142857 0.000000 0.785714 0.071429  
XX
//

我怎么能为一个范围唤醒$ 1(从00到文件结束)?

2 个答案:

答案 0 :(得分:2)

一种方式:

awk 'FNR == 1 { print FILENAME } { printf "%02d %s\n", FNR - 1, $0 }' infile

输出:

infile
00 00 0.000000 0.071429 0.071429 0.857143 
01 01 0.071429 0.428571 0.071429 0.428571 
02 02 0.357143 0.214286 0.357143 0.071429 
03 03 0.000000 0.714286 0.000000 0.285714 
04 04 0.000000 0.571429 0.000000 0.428571 
05 05 0.428571 0.357143 0.071429 0.142857 
06 06 0.000000 0.071429 0.071429 0.857143 
07 07 0.071429 0.000000 0.928571 0.000000 
08 08 0.000000 0.071429 0.000000 0.928571 
09 09 0.000000 0.285714 0.000000 0.714286 
10 10 0.142857 0.000000 0.785714 0.071429

答案 1 :(得分:2)

我不清楚真正的问题是什么。从表面上看,这应该可以胜任:

awk '{ if (line++ == 0) { print "AC " FILENAME; } printf("%.2d %s\n", NR-1, $0); }
     END { print "XX\n//" }'