我有一个格式如下的CSV文件:
id @ word @ information @ other information
Run Code Online (Sandbox Code Playgroud)
有时,第一列重复出现:
001 @ cat @ makes a great pet @ mice
002 @ rat @ makes a great friend @ cheese
003 @ dog @ can guard the house @ chicken
004 @ cat @ can jump very high @ fish
Run Code Online (Sandbox Code Playgroud)
您可以看到,第一行和最后一行在第2列中有重复数据.我想删除这些重复项(如果第2列完全相同)并合并第三列中包含的信息以及第四列中包含的信息.结果是这样的:
001 @ cat @ ? makes a great pet ? can jump very high @ ? mice ? fish
002 @ rat @ makes a great friend @ cheese
003 @ dog @ can guard the house @ chicken
Run Code Online (Sandbox Code Playgroud)
如何合并单元格中的数据,以便将来自第三列的所有数据组合在一起形成一个单元格,将第四列中的数据组合在一起形成一个单元格?
所描述的任务相当棘手,没有一些方便的工作就无法完成.使用mouviciel描述的技术我有一个解决方案.
这是funkychicken.awk:
BEGIN { FS = "@" }
function joinArray(values, sep, len) {
actualSep = "";
for (i = 1; i <= len; i++) {
result = result actualSep values[i];
actualSep = sep;
}
return result;
}
function resetFunkyToken() {
ftok = 0;
}
function funkyToken() {
return "(" ++ftok ")";
}
function trim(text) {
sub(/ *$/, "", text);
return text;
}
{
if ($2 in data) {
resetFunkyToken();
split(data[$2], existingValues, "@");
for (f = 3; f <= 4; f++)
existingValues[f] = " " funkyToken() trim(existingValues[f]) " " funkyToken() $f;
data[$2] = joinArray(existingValues, "@", NF);
}
else {
data[$2] = $0;
}
}
END {
for (item in data)
print data[item];
}
Run Code Online (Sandbox Code Playgroud)
然后按照命令执行带有所述数据的funkychicken.awk并对输出进行排序:
$ awk -f funkychicken.awk data.txt | sort
001 @ cat @ (1) makes a great pet (2) can jump very high @ (3) mice (4) fish
002 @ rat @ makes a great friend @ cheese
003 @ dog @ can guard the house @ chicken
Run Code Online (Sandbox Code Playgroud)
而不是使用你的时髦代币①②③④⑤⑥⑦⑧⑨⑩我去了较少的时髦(1)(2)....
归档时间: |
|
查看次数: |
1494 次 |
最近记录: |