我试图计算大表每个字段中存在的元素/单词的数量。字段由空格和字段元素("单词")以逗号分隔。该表还包含空字段(例如,两个或多个连续的空格),相当于0个元素。
例如,从这样的表:
val1 this,is,text this,more,text stop
val2 this,is a field
val3 end,text
这将是所需的输出:
val1 3 3 0 1
val2 0 2 1 1
val3 0 0 0 2
(我希望按原样保留第一列)
请注意,第一行中stop
值前面有两个空格,表示第四个字段有0个元素。类似的事情发生在其他方面。
我一直在使用awk的split函数创建一个数组,每个字段都有所需数量的元素:
awk '{ for(i = 2; i <= NF; i++) {
$i=split($i,a,",") ; { if (!$i) { $i="0" }};
}; print $0}' input
我将每个字段i
拆分为a
个n
元素的数组$i
,并将此值分配给变量!$i
。对于给定字段中的0个元素,($i=0
),val1 3 3 1
val2 2 1 1
val3 2
。
但这是我当前不需要的输出:
boolean flag=true;
int i=0;
while(i<allopts && flag)
{
if(conditons)//Put your conditions
{
//code
flag=false;
}
i++;
}
如您所见,省略了0个值。我认为将0值分配给空字段存在一些问题。
任何人都可以帮助我吗?非常感谢提前!
答案 0 :(得分:3)
您必须指定一个空格作为字段分隔符:
awk -F"[ ]" '{str=$1
for(i=2; i<=NF; i++){str=str" "split($i, arr, ",")}
print str}' test1
在这种情况下,输出为:
val1 3 3 0 1
val2 0 2 1 1
val3 0 0 0 2
答案 1 :(得分:3)
与printf基本相同的解决方案
$ awk -F'[ ]' '{printf "%s ", $1;
for(i=2;i<=NF;i++) printf "%s ", split($i,a,",");
print ""}' file
val1 3 3 0 1
val2 0 2 1 1
val3 0 0 0 2