26. Bash Shell - 文本处理:cut、paste、join
程序员文章站
2024-03-24 14:17:16
...
开篇词
我们可以借助 Linux 提供的 cut
、paste
、join
命令来提取、重复或合并文本文件内容。
借助 cut
来打印选中的部分
我们来为 cut
命令准备一些测试数据:
printf '%s\n' 001:andy:30:root 002:mary:26:user 003:anna:22:user 004:john:24:user 005:jeff:28:user >> cut_file
printf '%s\t%s\t%s\t%s\n' '006' 'andy' '30' 'root' '007' 'mary' '26' 'user' '008' 'anna' '22' 'user' '009' 'john' '24' 'user' '010' 'jeff' '28' 'user' >> cut_file
cat cut_file
提取指定的字节数
我们可以加入 -b
或 --bytes
参数来指定要输出的字节数:
cut -b 1-10 cut_file
cut --bytes 1-10 cut_file
提取指定的字符数
我们可以加入 -c
或 --characters
参数来指定要输出的字符数:
cut -c 1-10 cut_file
cut --characters 1-10 cut_file
提取指定的列数
默认情况下,-f
或 --fields
参数通过 TAB 来区分开每一列内容:
cut -f 1 -s cut_file
cut --fields 1 --only-delimited cut_file
所以我们需要添加一个额外的 -d
或 --delimiter
参数来允许 -f
或 --fields
参数根据指定的分隔符来区分每一列:
cut -f 1 -d ':' -s cut_file
cut --fields 1 --delimiter ':' --only-delimited cut_file
借助 paste
来合并文件的行
我们来为 paste
命令准备一些测试数据:
printf '%s\n' file1a file1b file1c file1d file1e file1f > paste_file1
printf '%s\n' file2a file2b file2c file2d file2e file2f > paste_file2
cat paste_file1
cat paste_file2
按顺序提取内容
我们可以借助 paste
命令来按顺序输出两个文件的内容:
paste paste_file1 paste_file2
重复内容
paste
命令支持重复显示同一个文件的内容:
paste paste_file1 paste_file2 paste_file1
混合来自标准输入的内容
通过借助 -
符号,我们可以将输入流中文件的内容分发至每一个 -
符号上:
paste - - - < paste_file1
我们还可以这样做:
paste - paste_file1 - paste_file2 - < paste_file1
借助 join
来使两个文件的内容交汇
我们来为 paste
命令准备一些测试数据:
printf '%s\n' 'ID1 User1' 'ID2 User2' 'ID3 User3' 'ID5 User5' > join_file1
printf '%s\n' 'ID1 User1' 'ID3 User3' 'ID4 User4' > join_file2
cat join_file1
cat join_file2
我们可以借助 join
来从两个文件中导出重叠的内容:
join join_file1 join_file2
我所撰写的英文版本
26. Bash Shell - Text Processing: cut, paste, join
引用
参见
想看手册的其他内容?请访问该手册的所属专栏:《Linux 管理员手册:既简单又深刻》