在每 2 个 ',' 之后分隔元素并在 bash 中推入下一行

Tej*_*tri 5 command-line sed awk text-processing

我的文件示例如下所示:

201012,720,201011,119,201710,16
Run Code Online (Sandbox Code Playgroud)

我想要的输出:

201012,720
201011,119
201710,16
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 5

使用 Sed 循环:

sed -e 's/,/\n/2' -e 'P;D' file
Run Code Online (Sandbox Code Playgroud)

前任。

$ echo '201012,720,201011,119,201710,16' | sed -e 's/,/\n/2' -e 'P;D'
201012,720
201011,119
201710,16
Run Code Online (Sandbox Code Playgroud)

这取代了第二次,\n,然后打印和删除了\n,反复,直至置换不再是成功的。

BSD 不理解命令\n右侧的换行符s,这是 ksh、bash、zsh shell 的一种解决方法:

sed -e :a -e $'s/,/\\\n/2' -e 'P;D' file
Run Code Online (Sandbox Code Playgroud)

或者,(旧)sed 的通用解决方案:

sed '
:a
s/,/\
/2
P;D
' file
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 5

$ paste -d, - - < <( tr ',' '\n' <file )
201012,720
201011,119
201710,16
Run Code Online (Sandbox Code Playgroud)

或者,没有进程替换,

$ tr ',' '\n' <file | paste -d, - -
201012,720
201011,119
201710,16
Run Code Online (Sandbox Code Playgroud)

这使用 用换行符替换文件中的所有逗号tr,然后用于paste创建由逗号分隔的两列。

如果tr感觉有点太简单,您可以将其替换为sed 'y/,/\n/',它的作用相同。