【问题标题】:Shell Script - Merging all rows in fileShell 脚本 - 合并文件中的所有行
【发布时间】:2019-03-28 03:30:07
【问题描述】:

请建议如何实现以下输出。 喜欢在 Shell 脚本中合并行。

尝试了一些东西,但没有成功。请检查以下屏幕截图是否相同。

我尝试了以下方法:

cat RAWDATA.csv | sed '1d'| sort | awk -F',' '{if(a!=$1) {a=$1; printf "\n%s%s",$0,FS} else {a=$1;$1="";printf $0 }} END {printf "\n" }' 

谢谢, 阿米特

【问题讨论】:

  • 到目前为止你尝试过的几件事是什么?
  • 试过:cat RAWDATA.csv | sed '1d'|排序 | awk -F',''{if(a!=$1) {a=$1; printf "\n%s%s",$0,FS} 否则 {a=$1;$1="";printf $0 }} END {printf "\n" }'
  • 在哪个外壳? sh 或 bash 或 ksh ? (我看到有 sh 标志,但只是确保。
  • 请发布文字而不是图片,以便用于测试脚本。
  • 能否请您发布您的原始文件。你提到了 CSV,但是很多人提到 CSV 文件这个词,而它实际上是一个普通文件,或者除了 CSV 之外的任何东西。

标签: shell unix awk grep sh


【解决方案1】:

这样的东西应该可以工作,显然没有测试,因为没有可测试的输入文件。

$ awk 'BEGIN {FS=OFS=","}
       NR==1 {print; next}
             {ks[k]; for(i=2;i<=NF;i++) if($i!="N") a[k,i]=$i}
         END {for(k in ks) {
                printf "%s", k
                for(i=2;i<=NF;i++) printf "%s", OFS (a[k,i]?a[k,i]:"N");
                print ""}' file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2020-01-01
    相关资源
    最近更新 更多