shell脚本 文件合并 - 字符串处理

本文介绍如何使用Shell脚本处理文件合并及字符串操作等任务。包括使用paste和awk合并两个文本文件,以及通过变量操作实现字符串截取的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.有两个文件,每个文件中有一列,把这两个文件中的列合并到一个文件中形成两列
普通shell脚本:
paste -d "\t" eng.txt chi.txt
awk:
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]" "$0;j++}' eng.txt chi.txt  

文件内容如下:
more eng.txt chi.txt 
::::::::::::::
eng.txt
::::::::::::::
semicolon
comma
delimiter
spacebar
hyphen
single quote
double quote
::::::::::::::
chi.txt
::::::::::::::
分号
逗号
定界符
空格键
连字符号
单引号
双引号
方法1、paste -d "\t" eng.txt chi.txt 
semicolon       分号
comma   逗号
delimiter       定界符
spacebar        空格键
hyphen  连字符号
single quote    单引号
double quote    双引号
方法2、或者使用awk来处理
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]" "$0;j++}' eng.txt chi.txt 
semicolon 分号
comma 逗号
delimiter 定界符
spacebar 空格键
hyphen 连字符号
single quote 单引号
double quote 双引号
hash 井号


2. 字符串操作
Linux 的字符串截取很有用。有八种方法。
假设有变量 var=http://www.hao.com/123.htm
 
2.1 # 号截取,删除左边字符,保留右边字符。
 
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.hao.com/123.htm
 
2,2 ## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.hao.com/          
结果是 123.htm


 
2.3 %号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.hao.com


2.4 %% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:


 
2.5 从左边第几个字符开始,及字符的个数
echo ${var:0:5}
 
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:


2.6 从左边第几个字符开始,一直到结束。
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.hao.com/123.htm
.
.
 
2.7 从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
 
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
.
.
 
2.8 从右边第几个字符开始,一直到结束。
echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm


注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)




3. 按相同列合并两个文件
 Join
   这里有两个文件file1和file2,当然已经分类。每个文件里都有一
些元素与另一个文件相关。由于这种关系, join将两个文件连在一起,这有点像修改一个主文
件,使之包含两个文件里的共同元素。文本文件中的域通常由空格或tab键分隔,但如果愿意,可以指定其他的域分隔符。


文件names:
M.Golls 12 Hidd Rd
P.Heller The Acre
P.Willey 132 the Grove
T.Norms 84 Connaught Rd
K.Fletch 12 Woodlea


文件towm:
M.Golls Norwich NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
kkkkkkkkkkkkkk


along@along-laptop:~/code/shell/sort$ join names towm 
M.Golls 12 Hidd Rd Norwich NRD
P.Willey 132 the Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
合并两个文件。默认的是按照第一域进行合并。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值