awk – 在没有标题和第一列的csv文件中对行进行排序

awk – 在没有标题和第一列的csv文件中对行进行排序,第1张

概述我有一个包含如下记录的CSV文件. id,h1,h2,h3,h4,h5,h6,h7 101,zebra,1,papa,4,dog,3,apple 102,2,yahoo,5,kangaroo,7,ape 我想在没有标题和第一列的情况下将行排序到此文件中.我的输出应该是这样的. id,h1,h2,h3,h4,h5,h6,h7 101,1,3,4,apple,dog,papa,zeb 我有一个包含如下记录的CSV文件.

ID,h1,h2,h3,h4,h5,h6,h7    101,zebra,1,papa,4,dog,3,apple   102,2,yahoo,5,kangaroo,7,ape

我想在没有标题和第一列的情况下将行排序到此文件中.我的输出应该是这样的.

ID,h7  101,apple,zebra  102,ape,yahoo

我尝试了以下AWK,但不知道如何排除标题和第一列.

awk -F"," ' {s=""for(i=1; i<=NF; i++) { a[i]=$i; }for(i=1; i<=NF; i++){for(j = i+1; j<=NF; j++){if (a[i] >= a[j]){temp = a[j];a[j] = a[i];a[i] = temp;}}}for(i=1; i<=NF; i++){ s = s","a[i]; }print s} ' file

谢谢

解决方法 如果perl没问题:

$perl -F,-lane 'print join ",",$.==1 ? @F : ($F[0],sort @F[1..$#F])' ip.txtID,h7 101,zebra102,yahoo

> -F,表示作为字段分隔符,结果保存在@F数组中

>有关其他选项的详细信息,请参阅https://perldoc.perl.org/perlrun.html#Command-Switches

> join“,”使用,作为输出字段分隔符
> $.== 1? @F代表第一行,按原样打印
>($F [0],排序@F [1 .. $#F])其他行,获取其他字段的第一个字段和排序输出

> ..是范围运算符,$#F将给出最后一个字段的索引

对于给定的标题,排序第一行也会起作用,因此这可以简化所需的逻辑

$perl -F,$F[0],sort @F[1..$#F]' ip.txtID,yahoo$ruby -F,-lane 'print [$F[0],$F.drop(1).sort] * ","' ip.txtID,yahoo
总结

以上是内存溢出为你收集整理的awk – 在没有标题和第一列的csv文件中对行进行排序全部内容,希望文章能够帮你解决awk – 在没有标题和第一列的csv文件中对行进行排序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1032571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存