如何通过计算列(字符数)来获取字段

时间:2014-10-23 09:39:34

标签: awk

我有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

1 个答案:

答案 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 

请为每个固定宽度字段编写一个范围,以代替...省略号。 我只为前三个写过范围,懒得我。

如果您不想打扰中间文件,只需使用|管道即可。