我在空格分隔的文件中按列2、3和1排序了这些数据(我使用了linux这样做):
0 0 2
1 0 2
2 0 2
1 1 4
2 1 4我想要创建一个新文件(保留原来的文件)
0 2 0,1,2
1 4 1,2基本上,将字段2和3放在第一位,并按字段1(作为逗号分隔列表)的元素分组。有什么方法可以通过awk,sed,bash one liner来实现这一点,从而避免为此编写一个Java,C++应用程序吗?
发布于 2014-08-08 15:15:04
由于文件已经被排序,您可以在它们更改时打印该行:
awk '
seen==$2 FS $3 { line=line "," $1; next }
{ if(seen) print seen, line; seen=$2 FS $3; line=$1 }
END { print seen, line }
' file
0 2 0,1,2
1 4 1,2这将保持输出的顺序。
发布于 2014-08-08 15:09:44
使用awk
awk '{k=$2 OFS $3} !(k in a){a[k]=$1; b[++n]=k; next} {a[k]=a[k] "," $1}
END{for (i=1; i<=n; i++) print b[i],a[b[i]]}' file
0 2 0,1,2
1 4 1,2发布于 2014-08-08 15:15:46
对于您的输入和输出,这一行可能会有所帮助:
awk '{f=$2 FS $3}!(f in a){i[++p]=f;a[f]=$1;next}
{a[f]=a[f]","$1}END{for(x=1;x<=p;x++)print i[x],a[i[x]]}' file测试:
kent$ cat f
0 0 2
1 0 2
2 0 2
1 1 4
2 1 4
kent$ awk '{f=$2 FS $3}!(f in a){i[++p]=f;a[f]=$1;next}{a[f]=a[f]","$1}END{for(x=1;x<=p;x++)print i[x],a[i[x]]}' f
0 2 0,1,2
1 4 1,2https://stackoverflow.com/questions/25206406
复制相似问题