admin 管理员组

文章数量: 887021

linux记忆留存(awk,scp,vim,sh),大数据基础

Linux学习

awk

  • awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。

  • 它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。

  • awk其实不仅仅是工具软件,还是一种编程语言。

  • 和 sed 命令类似,awk 命令也是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。

    • # awk [选项] '脚本命令' 文件名
      
  • 用法:

  • $ awk 动作 文件名
    
    • 例子:$ awk ‘{print $0}’ demo.txt
      • demo.txt是awk所要处理的文本文件
      • print是打印命令,$0代表当前行
      • 变量NF表示当前行有多少个字段,因此 N F 就 代 表 最 后 一 个 字 段 。 NF就代表最后一个字段。 NF就代表最后一个字段。(NF-1)代表倒数第二个字段。
      • 变量NR表示当前处理的是第几行。
      • awk的其他内置变量如下:
        • FILENAME:当前文件名
        • FS:字段分隔符,默认是空格和制表符。
        • RS:行分隔符,用于分割每一行,默认是换行符。
        • OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
        • ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
        • OFMT:数字输出的格式,默认为%.6g
  • awk还提供了一些内置函数,方便对原始数据的处理

  • toupper()用于将字符转为大写

    • $ awk -F ':' '{ print toupper($1) }' demo.txt
      
      • tolower():字符转为小写。
      • length():返回字符串长度。
      • substr():返回子字符串。
      • sin():正弦。
      • cos():余弦。
      • sqrt():平方根。
      • rand():随机数。
  • awk允许指定输出条件,只输出符合条件的行。

    • $ awk '条件 动作' 文件名
      --输出条件要写在动作的前面# 输出第三行以后的行
      $ awk -F ':' 'NR >3 {print $1}' demo.txt# 输出奇数行
      $ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt
      
  • awk提供了if结构,用于编写复杂的条件

    • $ awk -F ':' '{if ($1 > "m") print $1}' demo.txt
      #输出第一个字段的第一个字符大于m的行
      
    • if结构还可以指定else部分

      • $ awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt
        

scp命令

  • Linux scp 命令用于 Linux 之间复制文件和目录。

  • scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

  • scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。

  • 语法

    • scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
      [-l limit] [-o ssh_option] [-P port] [-S program]
      [[user@]host1:]file1 [...] [[user@]host2:]file2#简易写作
      scp [可选参数] file_source file_target 
      
    • 参数说明:

      • -1: 强制scp命令使用协议ssh1
      • -2: 强制scp命令使用协议ssh2
      • -4: 强制scp命令只使用IPv4寻址
      • -6: 强制scp命令只使用IPv6寻址
      • -B: 使用批处理模式(传输过程中不询问传输口令或短语)
      • -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
      • -p:保留原文件的修改时间,访问时间和访问权限。
      • -q: 不显示传输进度条。
      • -r: 递归复制整个目录。
      • -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
      • -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
      • -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
      • -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
      • -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
      • -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
      • -P port:注意是大写的P, port是指定数据传输用到的端口号
      • -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

vim

  • vim 是一个全屏幕纯文本编辑器,是 vi 编辑器的增强版。可以利用别名让输入 vi 命令的时候,实际上执行 vim 编辑器

  • # alias vi='vim'
    但是这样定义别名是临时生效,如果需要永久生效,请放置环境变量配置文件    ~/.bashrc   中
    
  • vim 的工作模式

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bbcxYlK-1630030706538)(C:\Users\Sunlight-E3B\AppData\Roaming\Typora\typora-user-images\image-20210812141034842.png)]
    • 命令模式:是主要输入快捷键的模式。命名模式要想进入输入模式,可以使用 a i o 等快捷键来进入。
  • 插入命令:

    • 命令作用
      a在光标所在的字符后插入
      A在光标所在的行尾插入
      i在光标所在的字符前插入
      I在光标所在的行首插入
      o在光标下插入新行
      O在光标上插入新行
  • *输入模式:*主要用于文本编辑,和记事本类似,输入数据就好

  • 末行模式(编辑模式):

    • :w 保存不退出
    • :w 新文件名 把文件另存为新文件
    • :q 不保存退出
    • :wq 保存退出
    • :! 强制
    • :q! 强制不保存退出,用于修改文件之后,不保存数据退出
    • :wq! 强制保存退出,当文件的所有者或 root 用户,对文件没有写权限的时候,强制写入数据使用
  • 命令模式操作

    • 移动光标

      • 上、下、左、右方向键 移动光标
        h(左) j(下) k(上) l(右) 移动光标

      • 光标移动到文件头或文件尾

      • gg 移动到文件头
        G 移动到文件尾(shift + g)

      • 光标移动到行首或行尾

      • ^ 移动到行首
        $ 移动到行尾

      • 移动到指定行

      • :n 移动到第几行(这里的 n 是数字)

    • 删除或剪切

      • 删除字母

      • x 删除单个字母
        nx 删除 n 个字母(n 是数字,如果打算从光标位置连续删除 10 个字母,可以使用 10x 即可

      • 删除整行或剪切

      • dd 删除单行
        ndd 删除多行
        :n1,n2d 删除指定范围的行

      • 删除行或多行,是比较常用的删除方法。这里的 dd 快捷键既是删除也是剪切。删除内容放入了剪切板,如果不粘贴就是删除,粘贴就是剪切。粘贴方法:

      • p 粘贴到光标下面一行
        P 粘贴到光标上面一行

      • 从光标所在行删除到文件尾

      • dG 从光标所在行删除到文件尾(d 是删除行,G 是文件尾,连起来就是从光标行删除到文件尾)

      • 快捷键功能描述
        x删除光标所在位置的字符
        dd删除光标所在行
        ndd删除当前行(包括此行)后 n 行文本
        dG删除光标所在行一直到文件末尾的所有内容
        D删除光标位置到行尾的内容
        :a1,a2d函数从 a1 行到 a2 行的文本内容
    • 复制

      • yy 复制单行

      • nyy 复制多行

        • 复制之后的粘贴依然可以使用 p 键或 P 键
      • 快捷键功能描述
        p将剪贴板中的内容粘贴到光标后
        P(大写)将剪贴板中的内容粘贴到光标前
        y复制已选中的文本到剪贴板
        yy将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
        yw将光标位置的单词复制到剪贴板
    • 撤销

      • u 撤销
      • ctrl + r 反撤销
        • u 键能一直撤销到文件打开时的状态,ctrl + r 能一直反撤销到最后一次操作状态
    • 替换

      • r 替换光标所在处的字符
      • R 从光标所在处开始替换字符,按 esc 键结束
  • 末行模式操作

    • 设置操作

      • :set nonu显示与取消行号:syntax on
      • :syntax off是否依据语法显示相关颜色帮助。默认会显示相关颜色来帮助排错:set hlsearch
      • :set nohlsearch设置是否将查找的字符串高亮显示。默认是高亮显示:set showmode
      • :set noshowmode设置是否在左下角显示如“-INSERT-” 之类的状态栏。默认是开启的:set list
      • :set nolist设置是否显示隐藏字符。(tab 键用 “^I” 表示,回车符用 “$” 键表示)
        • 上面设置的参数都只是临时生效,一旦关闭文件再打开,又需要重新输入。如果想要永久生效,需要手动建立 vim 的配置文件 “~/vimrc” ,把你需要的参数写入配置文件就永久生效了。
    • 查找

    • /查找内容 从光标所在行向下查找
      ?查找内容 从光标所在行向上查找
      n 下一个
      N 上一个

      • 快捷键功能描述
        /abc从光标所在位置向前查找字符串 abc
        /^abc查找以 abc 为行首的行
        /abc$查找以 abc 为行尾的行
        ?abc从光标所在为主向后查找字符串 abc
        n向同一方向重复上次的查找指令
        N向相反方向重复上次的查找指定
    • 替换

    • :1,10s/old/new/g 替换 1 到 10 行所有 old 为 new(s 表示替换)
      :%s/old/new/g 替换整个文件的 old 为 new(% 是一个变量,在这里代表整篇文档)

      • 在 shell 中 “#” 开头是注释,假如说我想注释文件前 10 行,如果手工一个一个注释会很麻烦,可以使用替换来解决。

      • :1,10s/^/#/g 注释 1 到 10 行
        :1,10s/^#//g 取消 1 到 10 行的注释

      • 快捷键功能描述
        r替换光标所在位置的字符
        R从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
        😒/a1/a2/g将当前光标所在行中的所有 a1 用 a2 替换
        :n1,n2s/a1/a2/g将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
        :g/a1/a2/g将文件中所有的 a1 都用 a2 替换
    • 导入其他文件的内容

    • :r 文件名 把文件内容导入到光标位置

    • 在 vim 中执行系统命令

    • :!命令 在 vim 中执行系统命令

      • 这里只是在 vim 中执行系统命令,但并不把系统命令的结果写入到文件中。主要用于在文件编辑中,查看系统信息,如时间。
    • 导入命令结果

    • :r !命令 在 vim 中执行系统命令,并把命令结果导入光标所在行

    • 多文件打开

    • # vim -o aa.txt abcd               上下分屏打开两个文件(小 o)# vim -O aa.txt abcd               左右分屏打开两个文件(大 O)
      
      • 如果是上下打开两个文件,可以通过先按 「ctrl + w」再按上下箭头的方式在两个文件之间切换。

      • 如果是左右打开两个文件,可以通过先按 「ctrl + w」再按左右箭头的方式在两个文件之间切换。

sh

  • sh命令就是shell,shell就是用来解释linux命令的,我们输入命令,指示linux帮我们做什么,而linux本身是看不懂我们输入的命令的,它只认识01,而事实显然不是如此, 那么在用户和linux之间必然有个桥梁起到了转换的作用,这里的桥梁就是shell。shell有很多种,常见的如:Bourne shell (sh)、C shell (csh) 和 Korn shell (ksh)。

  • Bourne shell 是 UNIX 最初使用的 shell,简称sh。 Linux 操作系统缺省的 shell 是Bourne Again shell,多了个Again,即简称 bash。我平常在linux用到的sh命令或者在shell脚本第一行写的“#!/bin/sh”都是指的Bourne shell吗,不是的。linux中默认把/bin/sh 指向了/bin/bash,所以我们平常用的就是/bin/bash。至于sh和bash什么区别,顾名思义的来解释,多了个Again嘛,其实事实也是如此,bash扩展了sh,并继承吸收了csh和ksh的优点

  • 格式 :sh [选项] 命令字符串或者shell脚本

    • -c  :command 后面跟一个字符串,这个字符串可以是我们平常执行的任何命令,有参数选项时一定要用引号括起来
      -x  :后面跟shell脚本,可以详细的显示shell脚本的执行信息
      

Hadoop框架之HDFS的shell操作

  • HDFS是存取数据的分布式文件系统,那么对HDFS的操作,就是文件系统的基本操作,比如文件的创建、修改、删除、修改权限等,文件夹的创建、删除、重命名等。对HDFS的操作命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。

  • Hadoop fs:使用面最广,可以操作任何文件系统。

  • hadoop fs -ls  显示当前目录结构,-ls -R 递归显示目录结构
    hadoop fs -mkdir  创建目录
    hadoop fs -rm   删除文件,-rm -R 递归删除目录和文件
    hadoop fs -put  [localsrc] [dst]  从本地加载文件到HDFS
    hadoop fs -get  [dst] [localsrc]  从HDFS导出文件到本地
    hadoop fs -copyFromLocal [localsrc] [dst]  从本地加载文件到HDFS,与put一致
    hadoop fs -copyToLocal [dst] [localsrc]  从HDFS导出文件到本地,与get一致
    hadoop fs -test -e  检测目录和文件是否存在,存在返回值$?为0,不存在返回1
    hadoop fs -text  查看文件内容
    hadoop fs -du  统计目录下各文件大小,单位字节。-du -s 汇总目录下文件大小,-du -h 显示单位
    hadoop fs -tail  显示文件末尾
    hadoop fs -cp [src] [dst] 从源目录复制文件到目标目录
    hadoop fs -mv [src] [dst] 从源目录移动文件到目标目录
  • 选项名称使用格式含义
    -ls-ls <路径>查看指定路径的当前目录结构
    -lsr-lsr <路径>递归查看指定路径的目录结构
    -du-du <路径>统计目录下个文件大小
    -dus-dus <路径>汇总统计目录下文件(夹)大小
    -count-count [-q] <路径>统计文件(夹)数量
    -mv-mv <源路径> <目的路径>移动
    -cp-cp <源路径> <目的路径>复制
    -rm-rm [-skipTrash] <路径>删除文件/空白文件夹
    -rmr-rmr [-skipTrash] <路径>递归删除
    -put-put <多个linux上的文件> <hdfs路径>上传文件
    -copyFromLocal-copyFromLocal <多个linux上的文件> <hdfs路径>从本地复制
    -moveFromLocal-moveFromLocal <多个linux上的文件> <hdfs路径>从本地移动
    -getmerge-getmerge <源路径> <linux路径>合并到本地
    -cat-cat <hdfs路径>查看文件内容
    -text-text <hdfs路径>查看文件内容
    -copyToLocal-copyToLocal [-ignoreCrc] [-crc] [hdfs源路径] [linux目的路径]从本地复制
    -moveToLocal-moveToLocal [-crc] <hdfs源路径> <linux目的路径>从本地移动
    -mkdir-mkdir <hdfs路径>创建空白文件夹
    -setrep-setrep [-R] [-w] <副本数> <路径>修改副本数量
    -touchz-touchz <文件路径>创建空白文件
    -stat-stat [format] <路径>显示文件统计信息
    -tail-tail [-f] <文件>查看文件尾部信息
    -chmod-chmod [-R] <权限模式> [路径]修改权限
    -chown-chown [-R] [属主][:[属组]] 路径修改属主
    -chgrp-chgrp [-R] 属组名称 路径修改属组
    -help-help [命令选项]帮助

数据仓库层次结构规范

  • 系统的信息模型从存储的内容方面可以分为,STAGE接口信息模型、ODS/DWD信息模型,MID信息模型、DM信息模型、元数据信息模型。
    • SRC接口层信息模型:提供业务系统数据文件的临时存储,数据稽核,数据质量保证,屏蔽对业务系统的干扰,对于主动数据采集方式,以文件的方式描述系统与各个专业子系统之间数据接口的内容、格式等信息。与该模型对应的数据是各个专业系统按照该模型的定义传送来的数据文件。STAGE 是生产系统数据源的直接拷贝,由ETL过程对数据源进行直接抽取,在格式和数据定义上不作任何改变。与生产系统数据的唯一不同是,STAGE层数据具有时间戳。
    • STAGE层存在的意义在于两点:
      1. 对数据源作统一的一次性获取,数据仓库中其他部分都依赖于STAGE层的数据,不再重复进行抽取,也不在生产系统上作运算,减小生产系统的压力;
      2. 在生产系统数据已经刷新的情况下,保存一定量的生产系统的历史数据,以便在二次抽取过程中运算出错的情况下可以进行回溯。
    • ODS/DWD层(对应原模型的ODSDW层)信息模型:简称DWD层是数据仓库的细节数据层,是对STAGE层数据进行沉淀,减少了抽取的复杂性,同时ODS/DWD的信息模型组织主要遵循企业业务事务处理的形式,将各个专业数据进行集中。为企业进行经营数据的分析,系统将数据按分析的主题的形式存放,跟STAGE层的粒度一致,属于分析的公共资源。
    • MID 信息模型:轻度综合层是新模型增加的数据仓库中DWD层和DM层之间的一个过渡层次,是对DWD层的生产数据进行轻度综合和汇总统计。轻度综合层与DWD的主要区别在于二者的应用领域不同,DWD的数据来源于生产型系统,并为满足一些不可预见的需求而进行沉淀;轻度综合层则面向分析型应用进行细粒度的统计和沉淀。
    • DM信息模型:为专题经营分析服务,系统将数据按分析的专题组织成多维库表的形式存放,属于分析目标范畴的数据组织与汇总,属于分析的专有资源。其信息主要来源于DWD 和MID层汇总,反映实时的经营状况,时间维度为天。而历史经营状况的分析,时间维度一般为月,同时也具有季度、年这样的维度。
    • MDW元数据信息模型:描述数据及其环境的数据,即是对数据资源的描述,是信息共享和交换的基础和前提,用于描述数据集的内容、质量、表示方式、空间参考、管理方式以及数据集的其他特征。一般来说,它有两方面的用途。首先,元数据能提供基于用户的信息,如记录数据项的业务描述信息的元数据能帮助用户使用数据。其次,元数据能支持系统对数据的管理和维护, 元数据机制主要支持以下五类系统管理功能:
      1. 描述哪些数据在数据仓库中;
      2. 定义要进入数据仓库中的数据和从数据仓库中产生的数据;
      3. 记录根据业务事件发生而随之进行的数据抽取工作时间安排;
      4. 记录并检测系统数据一致性的要求和执行情况;
      5. 衡量数据质量。

————————————————
版权声明:本文为CSDN博主「シ風」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:

本文标签: linux记忆留存(awk SCP vim sh),大数据基础