Awk 如何通过计算列(字符数)来获取字段
我有一个Awk 如何通过计算列(字符数)来获取字段,awk,Awk,我有一个logfile.txt,我想指定字段$4,但基于列数而不是字段数,因为字段由空格字符分隔,字段2($2)可能包含由空格分隔的值。我想计算行数,但如果字段2($2)包含空格字符,我不知道如何指定$4,而不引起问题 这是我的档案: KJKJJ1KLJKJKJ928482711 PIEJHHKIA 87166188177633 AJHHHH77760 00666667 876876800874
logfile.txt
,我想指定字段$4,但基于列数而不是字段数,因为字段由空格字符分隔,字段2($2
)可能包含由空格分隔的值。我想计算行数,但如果字段2($2
)包含空格字符,我不知道如何指定$4
,而不引起问题
这是我的档案:
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
如果记录由固定宽度字段组成,则可以使用
cut(1)
请为每个固定宽度字段写一个范围,以代替省略号…
。
我只写了前三个,懒惰的我
如果您不想麻烦处理中间文件,只需使用
|
管道。为什么所有内容都在END
块中?预期的输出是什么?您所做的想法是什么?这将帮助人们理解并找到解决方案。我想根据字段$4进行计算。但要在代码中指定此字段,我们必须基于关于字符数:输出应该是:1 20141008 AJHHHHH77760 1 20141008 HGHALJLKA700 1 20141008 JHJHJHJJJJJJUA876 1 20141008 HGJHJHJJJG661557008你在网站上问了很多问题来了解基本知识:在问题中添加完整的解释,而不是在评论中,也不是在答案中。试着让人们更容易阅读你的任务它将帮助我们,更重要的是,它将帮助您获得答案。Unix命令行是围绕使用将转换应用于文本文件的小工具这一理念构建的,只需要知道正确的工具……另外,请查看,例如,对于不同的、类似的任务,在paste(1)
、split(1)
和join(1)
。
% cut -c1-22,23-42,43-62,... --output-delimiter=, file | sed 's/, */,/g' > file.csv
% awk -F, '{your_code}' file.csv