mtk*_*mtk 42 text-processing paste
我在一个文件中有 1000 多行。文件开始如下(添加行号):
Station Name
Station Code
A N DEV NAGAR
ACND
ABHAIPUR
AHA
ABOHAR
ABS
ABU ROAD
ABR
Run Code Online (Sandbox Code Playgroud)
我需要将它转换为一个文件,通过每两行加入逗号分隔的条目。最终数据应如下所示
Station Name,Station Code
A N DEV NAGAR,ACND
ABHAIPUR,AHA
ABOHAR,ABS
ABU ROAD,ABR
...
Run Code Online (Sandbox Code Playgroud)
我正在尝试的是 - 尝试编写一个 shell 脚本,然后在echo
它们之间使用逗号。但我想一个更简单有效的单线可以在sed
/ 中完成这里的工作awk
。
有任何想法吗?
Jan*_*ary 53
只需使用cat
(如果你喜欢猫;-))和paste
:
cat file.in | paste -d, - - > file.out
Run Code Online (Sandbox Code Playgroud)
说明:paste
从多个文件中读取并将相应的行粘贴在一起(第一个文件的第 1 行和第二个文件的第 1 行等):
paste file1 file2 ...
Run Code Online (Sandbox Code Playgroud)
我们可以使用-
(破折号)代替文件名。paste
从file1(这是stdin)中获取第一行。然后,它想从 file2(这也是 stdin)读取第一行。然而,由于标准输入的第一行已经被读取和处理,现在等待输入流的是标准输入的第二行,它很paste
高兴地粘在第一行上。该-d
选项将分隔符设置为逗号而不是制表符。
或者,做
cat file.in | sed "N;s/\n/,/" > file.out
Run Code Online (Sandbox Code Playgroud)
PS 是的,可以将上述简化为
< file.in sed "N;s/\n/,/" > file.out
Run Code Online (Sandbox Code Playgroud)
或者
< file.in paste -d, - - > file.out
Run Code Online (Sandbox Code Playgroud)
其优点是不使用cat
.
但是,为了清楚起见,我并没有故意使用这个习语——它不那么冗长,我喜欢cat
(猫很好)。所以请不要编辑。
或者,如果您更喜欢粘贴到猫(粘贴是水平连接文件的命令,而 cat 垂直连接它们),您可以使用:
paste file.in | paste -d, - -
Run Code Online (Sandbox Code Playgroud)
小智 10
如果登陆这里的任何人都希望将所有行组合成一个 CSV one liner,请尝试
cat file | tr '\n' ','
Run Code Online (Sandbox Code Playgroud)
sed 'N;s/\n/,/' file
Run Code Online (Sandbox Code Playgroud)
使用 sed,每 2 行 join(N) 一次,并将换行符 (\n) 替换为“,”。