【问题标题】:transpose a column in unix转置unix中的列
【发布时间】:2016-11-23 03:59:41
【问题描述】:

我有一个包含类似数据的 Unix 文件。

1379545632,   
1051908588,    
229102020,    
1202084378,    
1102083491,    
1882950083,    
152212030,    
1764071734,    
1371766009,

(仅供参考,正如您在上面看到的那样,两个数字之间没有空行。这只是因为这里的编辑器。它只是一列所有数字都比其他数字低)

我想将其转置并打印为一行。

像这样:

 1379545632,1051908588,229102020,1202084378,1102083491,1882950083,152212030,1764071734,1371766009

同时删除最后一个逗号。

有人可以帮忙吗?我需要一个 shell/awk 解决方案。

【问题讨论】:

  • 您只需要使用编辑器{} 按钮来正确格式化您问题中的示例输入/输出。

标签: unix awk transpose


【解决方案1】:
tr '\n' ' ' < file.txt

要删除最后一个逗号,您可以尝试sed 's/,$//'

【讨论】:

  • 删除所有换行符后,输出不再是 POSIX 文本文件,因此 YMMV 与您通过管道传输到的任何 UNIX 工具(包括 sed)对它的处理方式相同。
  • 不错!例如,您可以使用cut 从 grep 输出中提取特定列,然后通过管道输入。 grep -i 'create\sview' someddl.sql | cut -d ' ' -f 3 | tr '\n' '|'。这为我提供了所有视图的列表,然后我可以将其用作另一个 grep 的模式,以查看谁在使用它们。
【解决方案2】:

使用 GNU awk 进行多字符 RS:

$ printf 'x,\ny,\nz,\n' | awk -v RS='^$' '{gsub(/\n|(,\n$)/,"")} 1'
x,y,z

【讨论】:

    【解决方案3】:
    awk 'BEGIN { ORS="" } { print }' file
    

    ORS : 输出记录分隔符。 每条记录都会用这个分隔符分隔。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2014-09-12
      相关资源
      最近更新 更多