首页 > 系统相关 >Linux cat、echo、seq、sort、cut、tr、diff、uniq

Linux cat、echo、seq、sort、cut、tr、diff、uniq

时间:2023-10-08 15:01:23浏览次数:35  
标签:sort 字符 cut seq 文件 tr 参数 排序

cat和echo

特点:

  • cat:从文件或标准输入读取内容并显示到标准输出(通常是屏幕)。提供一个或多个文件名作为参数时,cat 会连续显示这些文件的内容。

  • echo:输出参数内容到标准输出,提供给 echo 的任何内容(无论是文本、变量还是混合内容)都会被当作参数,然后 echo 将这些参数显示出来。

cat和echo区别:

  • cat 是为了读取和显示文件或标准输入的内容。

  • echo 是为了显示它的参数内容。


例如:输出time_stamp.log这个日志文件中的内容到屏幕上

 cat time_stamp.log

例如:没有提供文件名称,会从标准输入读取内容

$ cat

# 直到接收到 EOF(例如按下 Ctrl + D)就会结束

例如:

# 会将 Hello, World! 作为echo的参数输出到屏幕
echo "Hello, World!"

sort和seq

特点:

  • sort:可以接收标准输入,并对其内容按行进行排序。还可以直接接受文件名作为参数,并对文件中的内容进行排序。
  • seq:按照指定的开始值、结束值和增量来产生一系列的数字

区别:

  • sort 是一个排序工具,它接收文本输入并输出排序后的文本

  • seq 是一个数字生成工具,它根据给定的参数输出一个数字序列


seq的使用:

seq一般在shell脚本中,结合循环来进行使用。
例如:产生1到10的连续数字

seq 1 10

例如:产生1到10之间,增量式2的数字

seq 1 2 10

sort的使用

sort直接接收标准输入进行排序

# 完成输入所有行后,按 Ctrl + D(在大多数 UNIX/Linux 系统上)发送一个 EOF(End Of File)信号,告诉 sort 你已完成输入。

sort读取文件内容进行排序

sort的默认排序规则:
sort的默认排序规则是根据当前的区域设置(locale)来设置的,所以不同的系统配置和不同的环境,默认规则可能不同。

可以简单地理解为sort默认按照ASCII码的大小进行升序(先小后大)排序。

sort会先比较改行的第一个字符,如果每行的第一个字符不相同,就按照ASCII值较小的字符对应的那一行就会被排在前面,这时后续的字符不再进行比较。

只有当正在比较的字符相同时,sort 才会移动到下一个字符进行比较。所以sort是通过逐个字符比较来排出顺序的


sort降序排序
sort默认是从小到达升序排序的,可以加 -r 参数实现降序排序,也就是从大到小排序

sort按照数值排序
使用sort的 -n 参数时,会认为每行的起始部分是一个数值,并基于这个数值来进行排序。如果行的起始部分不是一个数值或是空行,sort 会将其视为 0。这就是为什么空行或者首字符不是数字行会排在前面。


例如:

此时仅会比较每行开始的数字部分,所以只会关注并比较最前面的 1 和 2。后面的就都不管了


sort按照指定部分排序:
通过-t 参数来指定分隔符,将一行分为多列,然后使用-k 参数来指定按照哪一列进行排序,可以也指定多列。

例如:

sort -n -t ',' -k 2 n.txt

cut和tr命令

特点:

  • cut:将一行内容根据特定的分隔符分为多列,然后按“列”提取文本内容

  • tr:是用于字符转换和文本替换。从标准输入读取内容,并将结果写入标准输出


cut的使用

使用cut命令的时候,一般使用 -d 参数来指定分隔符,然后再使用 -f 参数来指定取哪些列。

例如:

cut -d : -f 1 /etc/passwd

tr的使用

tr命令不仅可以用来替换指定字符,还可以实现多个重复字符的压缩,指定字符的删除等功能。

tr替换指定字符:
不加任何参数,tr默认就是实现字符替换功能。


例如:

默认会从标准输入读取数据进行替换,并输出到屏幕上

可以你用Linux提供的匿名管道符实现对文件内容的替换

cat 1.txt | tr '123' 'abc'

tr删除指定字符
通过tr的 -d 参数 就可以删除标准输入中指定的字符


例如:删除 a-z 的字符

cat 1.txt | tr -d  'a-z'

说明:tr命令不支持文件名的通配符,但是tr支持字符类和字符范围

  • 字符范围:使用 - 符号表示一个字符范围,例如 a-z 表示从 a 到 z 的所有小写字母

  • 字符类:例如 [:space:]:空白字符

tr实现多个字符压缩
通过tr的 -s 参数,可以将多个相同的字符压缩为一个,然后输出


例如:

df -h /dev/sda | tr -s ' '

uniq和diff

特点:

  • uniq:用于从输入中删除或报告重复的行
  • diff:用于比较文件的内容之间的差异

uniq的使用

不加任何参数,默认就是将标准输入中的数据去除掉重复的行,然后输出到频幕上。

如果想统计每行出现的次数,可以通过 -c 参数实现

如果只是想把重复的行输出,通过 -d 参数即可

说明:uniq 命令默认行为是检测相邻的重复行。如果两个重复行不是相邻的,uniq 不会视其为重复。所以需要与 sort 命令结合使用来先对内容排序,这样所有的重复行都会变为相邻行,然后再使用 uniq 来去除或检测这些重复行。

例如:查找两个文件中相同的行

 cat 1.txt 2.txt | sort | uniq -d

如果是像输出没有重复的行,通过 -u 参数即可


diff的使用

不加任何参数,即用来比较两个文件中内容的不同

2c2意思就是第一个文件的第二行和第二个文件的第二行不同,要让他们一样就需要改第一个文件的第二行内容。

< banana:这表示在比较中,第一个文件的第2行是"banana"。
---:分隔符,用于分隔两个文件中的差异。
> blueberry:这表示在比较中,第二个文件的第2行是"blueberry"。

# 这一串输出的意思是:为了使第一个文件与第二个文件相同,你需要将第一个文件中的 'banana' 更改为 'blueberry'”
  • c:change,表示需要更改一行来匹配另一行。

  • a:add,表示需要添加一行来匹配另一个文件。

  • d:delete,表示需要删除一行来匹配另一个文件。


例如:

表示第一个文件的5、6、7行和第二个文件不同,下面描述的就是具体的不同信息。

< 后面的是第一个文件的内容
----- 分隔符
< 后面的是第二个文件的内容

例如:

表示为了使第一个文件与第二个文件匹配,需要从第一个文件中删除第45行到第58行的内容(因为这些内容在第二个文件中不存在,至少在第29行周围不存在)。


例如:

表示要使第一个文件与第二个文件匹配,你需要将第一个文件的第61行(一个空行)更改为第二个文件的第32行到第36行的内容


例如:

表示要使得匹配,需要在第一个文件的61行后加上第二个文件的89到109行的内容才行。

标签:sort,字符,cut,seq,文件,tr,参数,排序
From: https://www.cnblogs.com/heyongshen/p/16636673.html

相关文章

  • ORA-12012 Error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_<NN> in 12.2 Dat
    1错误2023-10-08T13:11:12.127171+08:00Errorsinfile/oracle/diag/rdbms/arch/ARCH2/trace/ARCH2_j000_305066.trc:ORA-12012:erroronautoexecuteofjob"SYS"."ORA$AT_OS_OPT_SY_154038"ORA-20001:StatisticsAdvisor:Invalidtasknamefo......
  • Go - Sorting Arrays or Slices
    Problem: Youwanttosortelementsinanarrayorslice.Solution: Forint,float64,andstringarraysorslicesyoucanusesort.Ints,sort.Float64s,andsort.Strings.Youcanalsouseacustomcomparatorbyusingsort.Slice.Forstructs,youcan......
  • Keras Model 和 Sequential
    KerasModelhttps://cloud.tencent.com/developer/article/2162930===============================================================Keras模型Keras提供的模型,其中分为两类:Sequential顺序模型Model类模型我们可以通过fromkeras.modelsimportSequential或者fro......
  • idea报错:Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (d
    idea版本:​​2020.3​​idea报错:在查阅了资料以后发现是​​IDEA2020​​的兼容问题 Failedtoexecutegoalorg.codehaus.mojo:exec-maven-plugin:3.0.0:exec(default-cli)onprojectsms:Commandexecutionfailed.解决方法:1、测试不要用​​main​​方法测试,使用​​......
  • AtCoder Grand Contest 057 E RowCol/ColRow Sort
    洛谷传送门AtCoder传送门首先考虑一个经典的套路:转\(01\)。具体而言,我们考虑若值域是\([0,1]\)怎么做。发现可以很容易地判定一个\(A\)是否合法。设矩阵第\(i\)行的和为\(r_i\),第\(j\)列的和为\(c_j\),那么合法当且仅当\(A\)的\(\{r_i\}\)和\(\{c_j\}\)(可重集......
  • std::vector::sort
    std::sort(vector.begin(),vector.end(),[](inta,intb){if(a==1)returnfalse;//a为1就将这个1排在最后,因为返回的是falseif(b==1)returntrue;//还是将1排在最后returna>b;//降序排序,默认为升序排序})sort(起始迭代器,终止迭代器,排序规则);......
  • ‘Proof of the pudding’: Global variables and PAGE_EXECUTE_WRITECOPY
    ‘Proofofthepudding’:GlobalvariablesandPAGE_EXECUTE_WRITECOPYUNCATEGORIZEDPRODUCTIONDEBUGGING, WINDBGLEAVEACOMMENT TodayIwasteachingadebuggingclasstoourcustomers.Asafoundationalelementwenormallyreviewthevirtual-to-phys......
  • Androidstudio中 unable to execute Clang-tidy clazy-standalone is not found or ca
    这个问题可能是因为AndroidStudio不支持clazy,但是在设置菜单中仍然提供了这个选项,并且在这种情况下,它似乎被启用了¹。当通过clangd启用clang-tidy时,没有什么需要做的。当通过clangd禁用clang-tidy时,如果启用了clazy,就会出现这个错误¹。要解决这个问题,你可以尝试以下步骤:1.转......
  • Qto_ReinforcingElementBaseQuantities
    Qto_ReinforcingElementBaseQuantities箍筋数量   NameTypeDescriptionCountQ_COUNT LengthQ_LENGTH WeightQ_WEIGHT    ############################......
  • LINUX:FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.
     如图,问题表现为linux中可直接通过hive进行数据插入但在通过datagrip却更改不了此时,可能时yarn的运行分配的内存较少,或堆内存溢出。在yarn-site.xml中更改,以及mapred-site.xml中更改,完成。yarn的<property><name>yarn.scheduler.minimum-allocation-mb</name>......