gpt4 book ai didi

shell - 使用命令合并 csv 文件中具有相同值的行和每 100 行

转载 作者:行者123 更新时间:2023-12-05 01:24:24 29 4
gpt4 key购买 nike

我有一个如下所示的 csv 文件:

http://www.a.com/1,apple
http://www.a.com/2,apple
http://www.a.com/3,apple
http://www.a.com/4,apple
...
http://www.z.com/1,flower
http://www.z.com/2,flower
http://www.z.com/3,flower
...

我想将 csv 文件合并为新的 csv 文件,如下所示:

"http://www.a.com/1
http://www.a.com/2
http://www.a.com/3
http://www.a.com/4
",apple
"http://www.z.com/1
http://www.z.com/2
http://www.z.com/3
http://www.z.com/4
...
http://www.z.com/100
",flower
"http://www.z.com/101
http://www.z.com/102
http://www.z.com/103
http://www.z.com/104
...
http://www.z.com/200
",flower

我想保留第一列,每个单元格最多有 100 行 http url。第二列相同的值将出现在相应的单元格中。

有没有一个非常简单的命令模式来实现这个想法?

我使用了下面的命令:

awk '{if(NR%100!=0)ORS="\t";else ORS="\n"}1' test.csv > result.csv

最佳答案

$ awk -F, '$2!=p || n==100 {if(NR!=1) print "\"," p; printf "\""; p=$2; n=0}
{print $1; n+=1} END {print "\"," p}' test.csv
"http://www.a.com/1
http://www.a.com/2
http://www.a.com/3
http://www.a.com/4
",apple
"http://www.z.com/1
http://www.z.com/2
http://www.z.com/3
",flower

首先将字段分隔符设置为逗号(-F,)。然后:

  • 如果第二个字段发生变化($2!=p)或者如果我们已经在当前批处理中打印了 100 行(n==100):
    • 如果不是第一行,打印一个双引号,一个逗号,前面的第二个字段和一个换行符,
    • 打印一个双引号,
    • 将新的第二个字段存储在变量 p 中以供以后比较,
    • 重置行计数器 n
  • 对于所有行,打印第一个字段并递增行计数器 n
  • 最后打印一个双引号、一个逗号和第二个字段的最后一个值。

关于shell - 使用命令合并 csv 文件中具有相同值的行和每 100 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71371819/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com