输入文本文件合并文本列的文件
A | 1 | def | 1432
A | 1 | ffr | 1234
A | 1 | dfs | 3241
A | 2 | asf | 2213
所需的输出的
A | 1 | def 1432,ffr 1234,dfs 3241
A | 2 | asf 2213
在单行合并相关第2列值
输入文本文件合并文本列的文件
A | 1 | def | 1432
A | 1 | ffr | 1234
A | 1 | dfs | 3241
A | 2 | asf | 2213
所需的输出的
A | 1 | def 1432,ffr 1234,dfs 3241
A | 2 | asf 2213
在单行合并相关第2列值
你的问题不是详细说明,但这是朝着解决方案的一步:
awk -F\| '{ a[$1 "|" $2] = a[$1 "|" $2 ] "," $3 $4 }
END { for(x in a) print x a[x]}' input |
sed 's/,/|/' # Trim leading comma
这将删除不正确无论是在第一两列,而不是在输出的第三列的正确插入逗号领先的第一个逗号,和排序两个第一两列,而不只是第二。此外,输出的顺序将与输入不同。可能还有其他问题,但这可能有帮助。
我需要由第二列进行分组。并打印第3和第4栏。如上所示。 – Debaditya 2012-04-11 12:43:58
awk '
BEGIN { FS = " \\| "; OFS = SUBSEP = " | " }
{
val[$1,$2] = val[$1,$2] sep[$1,$2] $3 " " $4
sep[$1,$2] = ","
}
END { for (key in val) print key, val[key] }
'
这可能会不保留输入的顺序。此外,它同时使用第一列和第二列作为关键字,但正如你所说的第一列不会改变它是无关紧要的。
和你的问题是? – pavel 2012-04-11 11:44:55
我想要的输出如上所示。 – Debaditya 2012-04-11 11:47:20
你在样本输入中如何处理“B | 1 | aaa | 111”?它是否与“A | 1”行合并? “相关”是什么意思?你打印复制文本的多个副本吗?提供有限的样本不能提供足够的细节。 – 2012-04-11 11:47:38