我有一个很大的文本文件,总共有 46 列:
输入
Column1 Column2 ... Column46
我需要枚举并计算从第 17 列到第 46 列本身重复的次数。例如:
我的文件是这样的:
Column17 Column18 Column19 Column20 Column21 Column22 Column23 ... Column46
Column17 Column18 Column19 Column20 Column21 Column22 Column23 ... Column46
Column17 Column18 Column20 Column22
Column18 Column20
Column20
期望的输出:
1 Column17 - 2 times
2 Column18 - 3 times
3 Column19 - 1 time
4 Column20 - 4 times
5 Column21 - 0 times
6 Column22 - 2 times
7 Column23 - 1 time
" " - N times
29 Column46 - 1 times
我的 awk 命令:
awk '{n=1;if(NR==1)n=25;for(i=n;i<=NF;i++) a[$i]++} END{for(val in a) print val,a[val]}' filelog.txt
实际输出:
Column1 ... Column46
bla 1 blaN...3 bla 3
bla 3 blaN...2 bla 5
bla 7 blaN...4 bla 7
获取整个文件的所有字符串并计算它们重复的次数。 例如:
Column1 //There are 54 lines, takes all words/strings of that column
bla 3 //The 3 and 4, is the number of repetitions.
bla 4
但我的命令很重要全部列(来自1, 直到46)以及每个短语本身,我想要的是从 17 到 46 的数,就像所需输出有什么办法可以用我的相同命令来制作吗?还是一定要由其他人来制作?
答案1
使用猫命令与-n枚举选项。
并指定n=17因为你想从那里开始。
使用以下命令:
cat -n <(awk '{n=17;if(NR==1)n=25;for(i=n;i<=NF;i++) a[$i]++} END{for(val in a) print val,a[val]}' filelog.txt)
答案2
如果我正确理解你的要求,那么这就是问题所在:
{n=1;if(NR==1)n=25;for(i=n;i<=NF;i++) ...
对于除第一个记录之外的每条记录,您都设置n=1
.然后处理从 开始的所有列n
。但你实际上想要设置n=17
.