前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【linux工具】多行文本转一行处理技巧

【linux工具】多行文本转一行处理技巧

原创
作者头像
fankhu
修改2023-10-10 17:46:56
6620
修改2023-10-10 17:46:56
举报

日常工作如果涉及将多行文本处理为一行,手工处理比较费时,本篇文章介绍如何把多行文本处理为一行数据的一些linux命令。

1 场景示例

代码语言:javascript
复制
原始数据:tmp.txt
acd-eptjqb
acdro-ideeg
acd-ysneaen
acdro-nfyswl
acdro-vfusjp
acdro-pfjzuv
acdro-iprdgemn
acd-ktaof
acdro-albxp
acd-uzl
acdro-pnnpqh
acdro-wqje
acd-nmtkuq
acdro-rhhbfv
acd-ckbjhoj

我需要把这些数据转换为一行,并且用竖线"|"对每个数据进行分割:

代码语言:javascript
复制
acd-eptjqb|acdro-ideeg|acd-ysneaen|acdro-nfyswl|acdro-vfusjp|acdro-pfjzuv|acdro-iprdgemn|acd-ktaof|acdro-albxp|acd-uzl|acdro-pnnpqh|acdro-wqje|acd-nmtkuq|acdro-rhhbfv|acd-ckbjhoj

下面介绍几种可以处理的方案

2 awk命令

代码语言:javascript
复制
awk '{printf $0"|"}'   tmp.txt

效果:

3 tr命令

代码语言:javascript
复制
cat tmp.txt|tr '\n' '|'

效果:

命令说明:

代码语言:javascript
复制
tr 是一个 Unix/Linux 命令行工具,用于在字符级别转换、压缩和/或删除字符串。它从标准输入读取数据,并将结果输出到标准输出。以下是 tr 的常见用法和示例:

字符转换:
使用 tr 可以将一个字符集中的字符转换为另一个字符集中的对应字符:

echo "hello" | tr 'a-z' 'A-Z'

这将输出 “HELLO”。

字符删除:
使用 -d 选项可以删除指定字符集中的字符:

echo "hello world" | tr -d 'a-z'

这将输出 " ",因为所有小写字母都被删除了。

字符压缩:
使用 -s 选项可以将重复的字符压缩为单个字符:

echo "hello    world" | tr -s ' '

这将输出 “hello world”,连续的空格被压缩为一个。

字符集补集:
使用 -c 或 -C 选项可以指定字符的补集。例如,删除所有非数字字符:

echo "abc123def456" | tr -cd '0-9'

这将输出 “123456”。

字符类:
tr 支持某些预定义的字符类,例如 [:upper:]、[:lower:]、[:digit:] 等:

echo "HELLO" | tr '[:upper:]' '[:lower:]'

这将输出 “hello”。

注意:

tr 只能处理单字符替换。对于多字符模式或更复杂的替换,你可能需要使用 sed、awk 等工具。
当提供的两个字符集长度不一致时,tr 会将第一个字符集的最后一个字符扩展,使其与第二个字符集的长度匹配。
这只是 tr 的基本用法。要获取更详细的信息和选项,你可以查阅其手册页,使用 man tr 命令。

4 paste命令

代码语言:javascript
复制
paste -sd "|" tmp.txt

效果:

命令说明:

代码语言:javascript
复制
paste 是一个将多个文件或标准输入的行合并为单行的工具。
-s 选项告诉 paste 将输入视为单个文件(而不是并排的多个文件)。
-d '|' 指定使用 | 作为分隔符。

5 sed命令组合

代码语言:javascript
复制
cat tmp.txt|xargs|sed 's/ /|/g'

效果:

命令说明:

代码语言:txt
复制
xargs: 
正常情况下,xargs 命令读取标准输入(stdin)并将读到的内容作为参数传递给另一个命令。但在这里,由于 xargs 后面没有接任何具体的命令,它默认会将其输入内容传递给 echo 命令。这意味着它会将多行输入转换为单行输出,多行之间的换行符将被空格替换。

以下是 xargs 的一些常见用途和示例:

处理大量参数:
当参数列表太长而无法一次性传递给某个命令时(例如 rm、cp 或 mv),xargs 可以帮助分批处理这些参数。

find . -name '*.txt' | xargs rm

这会找到当前目录及其子目录中所有的 .txt 文件,并使用 xargs 批量删除它们。

组合多个命令:

cat filelist.txt | xargs -I {} cat {}

这会读取 filelist.txt 中列出的文件名,并使用 xargs 和 cat 逐个显示这些文件的内容。

并行执行:
使用 -P 选项,xargs 可以并行执行多个进程。例如,如果你想使用 4 个并行进程来压缩多个文件,你可以这样做:

find . -name '*.txt' | xargs -P 4 -I {} gzip {}

交互式使用:
使用 -p 选项,xargs 会询问每个参数是否执行:

find . -name '*.txt' | xargs -p rm

在删除每个 .txt 文件之前,这会询问你是否真的要删除它。

总的来说,xargs 是一个非常有用的工具,特别是当你需要处理大量的参数或在一个命令的输出基础上执行另一个命令时。

这个命令组合实际上并不是很有效,因为 xargs 和 sed 两者的组合有些冗余。如果目标是将多行内容转换为单行并使用特定分隔符,那么使用 paste 或其他方法可能更为简洁。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 场景示例
  • 2 awk命令
  • 3 tr命令
  • 4 paste命令
  • 5 sed命令组合
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档