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)
使用 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)
$ 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/'
,它的作用相同。