首先,如果这个问题有更好的标题,我全都听见了!
有更好的方法吗?
我有这种格式的数据文件input.txt
:
field1=value1
field2=value2
field3=value3
.
.
.
field1=value4
field2=value5
field3=value6
依此类推......并希望最终得到:
field1,value1 value4 ... valueM
field2,value2 value5 ... valueN
field3,value3 value6 ... valueO
我尝试了什么:
生成唯一键:cat input.txt |awk -F"=" '{print $2}' |sort -u > data_key
循环遍历data_key
#!/bin/bash file=input.txt keys=`cat data_key` for value in $keys do output=`cat $file |grep $value |awk -F"=" '{print $2}' |tr -s '[:space:]' '[ *]' ` echo $value, $output done
答案 0 :(得分:2)
Perl解决方案。它散列字段,每个字段与一组值相关联。但输出行的顺序是随机的。
perl -e 'while (<>) {
chomp;
($f, $v) = split /=/, $_, 2;
push @{ $h{$f} }, $v;
}
print "$_,@{ $h{$_} }\n" for keys %h;
' input.txt
答案 1 :(得分:1)
以下基于awk的解决方案应该可行。这使用由字段名称键控的关联数组。值会在遇到时连接起来。
awk -F'=' '{z[$1]=z[$1]" "$2} END{for(i in z){print(i","z[i])}}' file_name.txt
答案 2 :(得分:0)
awk -F"=" '{a[$1]=a[$1]","$2;}END{for(i in a)print i,a[i];}' your_file
测试如下:
> cat temp
field1=value1
field2=value2
field3=value3
field1=value4
field2=value5
field3=value6
> awk -F"=" '{a[$1]=a[$1]","$2;}END{for(i in a)print i,a[i];}' temp
field1 ,value1,value4
field2 ,value2,value5
field3 ,value3,value6
>