【问题标题】:How to convert vertical data in multiple file to comma separated without creating new file [duplicate]如何在不创建新文件的情况下将多个文件中的垂直数据转换为逗号分隔[重复]
【发布时间】:2021-12-13 19:46:16
【问题描述】:

我被它困住了,不知道如何继续它

我有一个文件夹叫:demo

因为它们有 n 个文件,但文件只有一列数据,并且是垂直形式

需要将如下所示的垂直数据转换为水平逗号分隔的形式,而不使用 sed 创建新文件

文件 1 中的数据:

ABX
aHA
AHAK
AFGJK
AA

文件 2 中的数据:

1234
hakk
1567
gahsll

使用sed命令将两个文件数据转换为水平逗号分隔格式

我的命令:

sed -i 's/\n//g' /Demo/*.*

输出:

ABX,aHA,AHAK,AFGJK,AA

同样适用于文件 2

注意:Demo文件夹可以包含n个文件

【问题讨论】:

  • 请澄清是否应该将逗号分隔的行从 file1file2 输出到一个包含多行此类行的文件,或者每个单独的文件包含一行。 (如果是后者,那么标题中的“多个文件”要求似乎无关紧要。)

标签: shell unix sed text-processing


【解决方案1】:

这可能对你有用(GNU 粘贴):

paste -sd, file > tempFile && mv tempFile file

-s 连续粘贴,-d 是分隔符。

或使用 sed:

sed -zi 's/\n/,/g;s/,$/\n/' file

-z 选项将整个文件拖入模式空间。

-i 选项允许就地编辑。

,'s 替换所有换行符,如果文件以换行符结尾,则恢复最后一个换行符。

替代方案:

sed -i 'H;$!d;x;s/.//;s/\n/,/g' file

将整个文件复制到保留空间中,删除第一个换行符,然后用,'s 替换所有其他换行符。

【讨论】:

  • 我需要将数据覆盖到同一个文件中
  • @wovef57249 直接输出到临时文件,并将临时文件的 mv 输出到原始文件,例如 paste -sd, file > temp && mv temp file
  • 或者,安装moreutils并执行paste -sd, file | sponge file
  • @glennjackman : 是否可以使用 sed 命令使用 inplace 选项 ì -> sed i ...你能分享吗
  • @potong : 你能逐步解释一下 sed 命令发生了什么吗
猜你喜欢
  • 2010-10-30
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多