【发布时间】:2018-08-14 14:05:50
【问题描述】:
我一直在寻找使用 sed、awk 或 cut 来执行此操作。我愿意使用任何其他可以通过管道传输数据的命令行程序。
我有大量以逗号分隔的数据。这些行有 14 到 20 列。我需要将第 10 列与每行的第 11 列递归连接,以便每行正好有 14 列。换句话说,这是:
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p
会变成:
a,b,c,d,e,f,g,h,i,jkl,m,n,o,p
我可以获得前 10 列。我可以得到最后的 N 列。我可以连接列。我想不出如何在一行中完成,所以我可以通过它传递无穷无尽的数据流,最终每行正好有 14 列。
示例(根据要求):
一行有多少列?
sed 's/[^,]//g' | wc -c
获取前 10 列:
cut -d, -f1-10
获取最后 4 列:
rev | cut -d, -f1-4 | rev
连接第 10 列和第 11 列,之后显示第 1-10 列:
awk -F',' ' NF { print $1","$2","$3","$4","$5","$6","$7","$8","$9","$10$11}'
【问题讨论】:
-
在盲目应用之前,请阅读标签的描述。我刚刚删除了误用的“linux”标签。
-
@UlrichEckhardt imo,标记
linux确实有助于 cli 解决方案.. 因为awk/sed/etc的 GNU 版本具有 POSIX 定义之外的附加功能.. -
首先,您可以提及您使用的是 GNU(而不是 Linux!)版本的工具。其次,阅读描述:它清楚地谈到了 Linux 特定的 API。许多 GNU 程序也运行在其他操作系统内核之上,它们不是特定于 Linux 的。
-
是的,这是一种方式……或者使用
gnu标签……但我发现linux标签在这种情况下更常见
标签: awk sed command-line cut