26. Bash Shell - 文本处理:cut、paste、join

开篇词

我们可以借助 Linux 提供的 cutpastejoin 命令来提取、重复或合并文本文件内容。
 

借助 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

将多行测试数据打印至 cut_file
 

提取指定的字节数

我们可以加入 -b--bytes 参数来指定要输出的字节数:

cut -b 1-10 cut_file
cut --bytes 1-10 cut_file

从行的开头打印 10 个字节
 

提取指定的字符数

我们可以加入 -c--characters 参数来指定要输出的字符数:

cut -c 1-10 cut_file
cut --characters 1-10 cut_file

从行的开头打印 10 个字符
 

提取指定的列数

默认情况下,-f--fields 参数通过 TAB 来区分开每一列内容:

cut -f 1 -s cut_file
cut --fields 1 --only-delimited cut_file

提取 cut_file 的第一列
所以我们需要添加一个额外的 -d--delimiter 参数来允许 -f--fields 参数根据指定的分隔符来区分每一列:

cut -f 1 -d ':' -s cut_file
cut --fields 1 --delimiter ':' --only-delimited cut_file

提取 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 管理员手册:既简单又深刻

发布了83 篇原创文章 · 获赞 6 · 访问量 1943

猜你喜欢

转载自blog.csdn.net/stevenchen1989/article/details/104082400