我有logfile.txt
并且我想指定提交的$ 4,但是基于列数而不是字段数,因为字段用空格字符分隔,字段2($2
)可能包含由空格分隔的值。我想计算行数,但如果字段2($4
)包含空格字符,我不知道如何指定$2
而不会导致问题。
这是我的档案:
KJKJJ1KLJKJKJ928482711 PIEJHHKIA 87166188177633 AJHHHH77760 00666667 876876800874 2014100898798789979879877770
KJKJJ1KLJKJKJ928482711 HKHG 81882776553868 HGHALJLKA700 00876763 216897879879 2014100898798789979879877770
KJKJJ1KLJKJKJ928482711 UUT UGGT 81762665356426 HGJHGHJG661557008 00778787 268767860704 2014100898798789979879877770
KJKJJ1KLJKJKJ9284827kj ARTH HGG 08276255534867 HGJHGHJG661557008 00876767 212668767684 2014100898798789979879877770
这是代码:
awk 'END { OFS="\t"; for (k in c) print c[k],"\t"k,"\t"f[k] } { k = $4 c[k]++; f[k]=substr($0,137,8) }' logfile.txt
我想基于$ 4字段计算。但要在代码中指定此字段,我们必须基于字符数(substr($ 0,..,..):
输出值为:
1 20141008 AJHHHH77760
1 20141008 HGHALJLKA700
2 20141008 HGJHGHJG661557008
答案 0 :(得分:1)
如果您的记录由固定宽度字段组成,则可以使用cut(1)
% cut -c1-22,23-42,43-62,... --output-delimiter=, file | sed 's/, */,/g' > file.csv
% awk -F, '{your_code}' file.csv
请为每个固定宽度字段编写一个范围,以代替...
省略号。
我只为前三个写过范围,懒得我。
如果您不想打扰中间文件,只需使用|
管道即可。