文本处理——每两行用逗号连接

文本处理——每两行用逗号连接

我的一个文件中有 1000 多行。文件开头如下(已添加行号):

Station Name
Station Code
A N DEV NAGAR
ACND
ABHAIPUR
AHA
ABOHAR
ABS
ABU ROAD
ABR

我需要将其转换为一个文件,通过连接每两行以逗号分隔条目。最终数据应该是这样的

Station Name,Station Code
A N DEV NAGAR,ACND
ABHAIPUR,AHA
ABOHAR,ABS
ABU ROAD,ABR
...

我正在尝试的是 - 尝试编写一个 shell 脚本,然后echo在它们之间使用逗号。但我想一个更简单有效的单行语句可能会在sed/中完成这里的工作awk

有任何想法吗?

答案1

只需使用cat(如果你喜欢猫;-))和paste

cat file.in | paste -d, - - > file.out

说明:paste从多个文件中读取并将相应的行粘贴在一起(第一个文件中的第 1 行与第二个文件中的第 1 行等):

paste file1 file2 ...

-我们可以使用(破折号)代替文件名。paste从 file1 (即标准输入)获取第一行。然后,它想要从 file2(也是标准输入)读取第一行。然而,由于 stdin 的第一行已经被读取并处理,现在在输入流上等待的是第二stdin 行,它paste很高兴地粘附到第一个。该-d选项将分隔符设置为逗号而不是制表符。

或者,做

cat file.in | sed "N;s/\n/,/" > file.out

PS 是的,可以将上面简化为

< file.in sed "N;s/\n/,/" > file.out

或者

< file.in paste -d, - - > file.out

其优点是不使用cat.

不过我没有用过这个成语故意,为了清晰起见——它不太冗长,我喜欢cat(猫很好)。所以请不要编辑。

或者,如果您更喜欢使用“粘贴”而不是“猫”(“粘贴”是水平连接文件的命令,而“猫”是垂直连接文件的命令),您可以使用:

paste file.in | paste -d, - -

答案2

如果有人登陆这里希望将所有行合并到 CSV 单行中,请尝试

cat file | tr '\n' ','

答案3

sed 'N;s/\n/,/' file

使用 sed,每 2 行 join(N) 一次,并将换行符 (\n) 替换为“,”。

答案4

paste -sd ',\n' file.in > file.out

另请注意,因为我们只是将一个字符替换为另一个字符(每隔一个换行符用逗号),所以我们可以就地处理输入文件:

paste -sd ',\n' file.in 1<> file.in

(但要注意,它可能无法在具有 CRLF 终止符(例如 Microsoft 的终止符)的非 Unix 系统上运行,一些模拟的 POSIXpaste可能会以非 Unix 方式处理)

相关内容