shell--工具(sort、uniq 、tr、cut)

目录

一、sort工具

1.语法格式

2.常用的选项

 3.sort举例

二、uniq工具

 三、tr工具

四、cut-列截取工具


一、sort工具

sort是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。

1.语法格式

sort 选项 文件

2.常用的选项

-f:忽略大小写

-b:忽略每行前面的空格

-M:按照月份进行排序 -n:按照数字进行排序

-r:反向排序

-u:等同于uniq,表示相同的数据仅显示一行

-t:指定分隔符,默认使用[Tab]键分隔

-o:<输出文件>:将排序后的结果转存至指定文件

-k:指定排序区域

 3.sort举例

不加任何选项
不加任何选项默认按第一列升序,字母的话就是从a到z由上而下显示

 以冒号进行分隔,按数字排序对第三列进行排序

 将输出结果不在屏幕上输出,而是输出在passwd.bak文件

 去重(-u)

 

二、uniq工具

主要用于去除连续的重复行

注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重

uniq [选项]  参数

-c:进行计数

-d:仅显示重复行

-u:仅显示出现一次的行

 uniq举例

不加任何选项表示去掉连续的重复的行然后输出结果

 

 对重复的行进行计数并显示

先用sort命令进行排序,再统计字符出现的行数

不然会将不连续的相同数值次数进行输出

 

 三、tr工具

  • 它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符
  • 从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

格式

tr [选项]… SET1 [SET2]
  • 1

常用选项

-d 删除字符
 
-s 删除所有重复出现的字符,只保留第一个

 

 将passwd.bak文件中的所有小写转换成大写

 将bin替换成abc,就是将b替换成a,i替换成b,n替换成c

 删除所有字母

 

四、cut-列截取工具

  • cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
  • 如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一
  • cut只擅长于处理单个字符为间隔的文本,-b只能分割字母,-c既可以分割字母也可以分割中文

选项

-b:按字节截取
 
-c:按字符截取,常用于中文
 
-d:指定以什么为分隔符截取,默认为制表符
 
-f:通常和-d一起

例: 表示查看passwd.bak中第一行第一列,(cut -d: -f1表示截取以:为分隔的第一列)

 例:取日志访问量最高的10个IP

cat nginx.access.log-2021013 | cut -d " " -f1 | sort -n | uniq -c | sort -nr | head

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将上述shell语句转换为Python语句的代码: ```python if stage <= 2 and stop_stage >= 2: # Make train dict print("Make a dictionary") os.makedirs(os.path.dirname(dict), exist_ok=True) with open(dict, "w") as f: f.write("<blank> 0\n") # 0 will be used for "blank" in CTC f.write("<unk> 1\n") # <unk> must be 1 if token_type == "bpe": # we borrowed these code and scripts which are related bpe from ESPnet. with open(f"data/{train_set}/text") as text_file: texts = [line.strip().split()[1:] for line in text_file] with open("data/lang_char/input.txt", "w") as input_file: for text in texts: input_file.write(" ".join(text) + "\n") subprocess.run(f"tools/spm_train --input=data/lang_char/input.txt --vocab_size={nbpe} --model_type={bpemode} --model_prefix={bpemodel} --input_sentence_size=100000000", shell=True) with open(f"{bpemodel}.vocab") as vocab_file: vocab = [line.strip().split()[0] for line in vocab_file] with open(dict, "a") as dict_file: for i, vocab_item in enumerate(vocab): dict_file.write(f"{vocab_item} {i+2}\n") elif token_type == "char": with open(f"data/{train_set}/text") as text_file: texts = [line.strip().split()[1] for line in text_file] texts = " ".join(texts) tokens = subprocess.check_output(f"echo '{texts}' | tools/spm_encode --model={bpemodel}.model --output_format=piece", shell=True) tokens = tokens.decode().split("\n") tokens = [token.strip() for token in tokens if token.strip() != ""] tokens = sorted(set(tokens)) with open(dict, "a") as dict_file: for i, token in enumerate(tokens): dict_file.write(f"{token} {i+2}\n") num_token = sum(1 for line in open(dict)) with open(dict, "a") as dict_file: dict_file.write(f"<sos/eos> {num_token}\n") # <eos> ``` 需要注意的是,在Python中也需要使用相应的模块和工具来实现shell语句中的一些操作,例如在此代码中使用了`os`、`subprocess`模块和`tools/spm_train`、`tools/spm_encode`脚本来进行文件操作和调用外部命令。另外,由于Python中没有直接对应的`$`符号,需要使用`f-string`或者`str.format()`方法来进行字符串格式化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值