Liunx Common Operations Advanced Edition
データフローリダイレクト
データストリームリダイレクト:コマンドを実行すると、コマンドはファイルからデータを読み取り、処理後に画面に出力する場合があります。標準出力と標準エラー出力は、それぞれ[標準出力]と[標準エラー出力]を表します。
標準出力:コマンドラインから返される正しい情報
標準エラー出力:コマンドが失敗した後に返されるエラーメッセージ
- 標準入力(stdin):コードは0です。<または<<を使用してください
- 標準出力(stdout):コードは1で、>または>>を使用します
- 標準エラー出力(stderr):コードは2で、2>または2 >>を使用します。
上記のコードの意味:
- 1>:指定したファイルまたはデバイスに[正しいデータ]を上書きして出力します
- 1 >>:[正しいデータ]を指定したファイルまたはデバイスに累積的に出力します
- 2>:上書きして指定したファイルまたはデバイスに[間違ったデータ]を出力します
- 2 >>:指定したファイルまたはデバイスに[間違ったデータ]を累積的に出力します
場合:
# 下面的命令输出了正确的日志信息和错误的日志信息
[hadoop@bigdata01 tmp]$ find /home -name .bashrc
find: ‘/home/ruoze’: Permission denied
/home/hadoop/.bashrc
find: ‘/home/azkaban’: Permission denied
# 分别输出正确信息和错误信息到不同的文件,执行命令会输出正确日志和错误日志
find /home -name .bashrc > right.out 2>error.out
# 将错误日志和正确日志写到一个文件中且保证日志输出的顺序
find /home -name .bashrc > all.out 2>&1 -- 推荐使用
find /home -name .bashrc &> all.out
ソートコマンドの使用
sortはソートに役立ち、指定されたデータ形式に従ってソートできます。たとえば、数値とテキストのソートは異なります。
[root@bigdata01 ~]# sort --help
Usage: sort [OPTION]... [FILE]...
or: sort [OPTION]... --files0-from=F
-b, --ignore-leading-blanks 忽略最前面空格字符部分
-f, --ignore-case 忽略大小写的差异
-k, --key=KEYDEF 以哪个区间来进行排
-r, --reverse 反向排序
-u, --unique uniq,相同的数据只出现一行
-t, --field-separator=SEP 分割符号,就是以【Tab】键进行分割
-n, --numeric-sort 以【纯数字】进行排序,(默认是使用文字形式进行排序)
。。。。
uniqの用途:
[root@bigdata01 ~]# uniq --help
Usage: uniq [OPTION]... [INPUT [OUTPUT]]
-c, --count 进行计数
-i, --ignore-case 忽略大小写
場合:
[hadoop@bigdata01 tmp]$ cat test3.txt
hadoop
hadoop
hadoop
spark
spark
spark
[hadoop@bigdata01 tmp]$ cat test3.txt | uniq
hadoop
spark
wcの用途:
[root@bigdata01 ~]# wc --help
Usage: wc [OPTION]... [FILE]...
-c, --bytes 统计字节数
-m, --chars 统计字符数
-l, --lines 列出多少行
場合:
[hadoop@bigdata01 tmp]$ cat test.txt |wc
16 16 227
[hadoop@bigdata01 tmp]$ cat test.txt |wc -l
16
[hadoop@bigdata01 tmp]$ cat test.txt |wc -m
227
[hadoop@bigdata01 tmp]$ cat test.txt |wc -w
16
sedコマンドは簡単に使用できます
Sedはストリームエディタであり、テキスト処理に非常に優れたツールであり、正規表現で完全に使用でき、その機能は並外れています。処理中、現在処理されている行は「パターンスペース」と呼ばれる一時バッファに格納され、バッファ内のコンテンツはsedコマンドで処理されます。処理が完了すると、バッファのコンテンツが画面に送信されます。次に、次の行を処理し、ファイルの終わりまでこの方法を繰り返します。リダイレクトを使用して出力を保存しない限り、ファイルの内容は変更されません。Sedは主に、1つ以上のファイルを自動的に編集するために使用されます。データ行の置換、削除、追加、選択、ファイルに対する繰り返し操作の簡素化、変換プログラムの作成などの特定のタスクを実行できます。
sed的命令格式:sed [options] 'command' file(s);
sed的脚本格式:sed [options] -f scriptfile file(s);
パラメータ:
-e :直接在命令行模式上进行sed动作编辑,此为默认选项;
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
-i :直接修改文件内容;
-n :只打印模式匹配的行;
-r :支持扩展表达式;
-h或--help:显示帮助;
-V或--version:显示版本信息。
sedの一般的なコマンド
a\ 在当前行下面插入文本;
i\ 在当前行上面插入文本;
c\ 把选定的行改为新的文本;
d 删除,删除选择的行;
D 删除模板块的第一行;
s 替换指定字符;
場合:
# 替换指定的内容
[root@bigdata01 tmp]# cat test3.txt
HADOOP
HADOOP
HADOOP
spark
spark
spark
[root@bigdata01 tmp]# sed 's/HADOOP/hadoop/g' test3.txt ==> 不会替换原文件呢中内容
hadoop
hadoop
hadoop
spark
spark
spark
[root@bigdata01 tmp]# cat test3.txt
HADOOP
HADOOP
HADOOP
spark
spark
spark
[root@bigdata01 tmp]# sed -i 's/HADOOP/hadoop/g' test3.txt ==> 替换原文件中的内容
[root@bigdata01 tmp]# cat test3.txt
hadoop
hadoop
hadoop
spark
spark
spark
[root@bigdata01 tmp]#
データの検索と表示:
[root@bigdata01 tmp]# clear
[root@bigdata01 tmp]# nl test.txt |sed '2,5d' ===> 不显示2行和5行
1 1,hadoopdoophadoophaoddop,3
6 6,flume,56
7 7,kylin,2
8 8,es,1
9 9,hadoop,4
10 10,hadoop,12
11 11,flink,6
12 12,flink,4
13 13,spark,4
14 14,spark,56
15 15,spark,22
16 16,spark,33
[root@bigdata01 tmp]# nl test.txt |sed '3,$d' ===> 不显示第三行到最后一行
1 1,hadoopdoophadoophaoddop,3
2 2,flinflinkflinkflinkflinkk,5
[root@bigdata01 tmp]# nl test.txt |sed '2,$d' ===> 不显示第二行到最后一行,只显示第一行
1 1,hadoopdoophadoophaoddop,3
awkの一般的に使用されるコマンド
Awkは強力なテキスト分析ツールです。簡単に言えば、awkは、ファイルを1行ずつ(スペース、タブ)読み取るデフォルトの区切り文字として各行をスライスし、カットされた部分に対してさまざまな分析と処理を実行します。
データの行全体を処理するために一般的に使用されるsedと比較して、awkは処理のために行をいくつかのフィールドに分割することを好むため、awkは小さなテキストデータの処理に非常に適しています
awk [-F field-separator] 'commands' input-file(s)
awk '条件类型1{操作1} 条件类型2{操作2}...' filename
[-Fセパレータ]はオプションです。awkはデフォルトのフィールドセパレータとしてスペースとタブを使用するため、フィールド間にスペースまたはタブがあるテキストを参照する場合は、このオプションを指定する必要はありませんが、ファイルを参照する場合は、 / etc / passwdとして、このファイルの各フィールドがコロンで区切られている場合は、-Fオプションを指定する必要があります
- NF:各行のフィールド数($ 0)
- NR:awkが現在配置されている行の数
- FS:現在の分割文字。デフォルトはスペースバーです。
# 原始数据文件
[root@bigdata01 tmp]# cat tmpdata.txt
1,hadoop,23323
2,spark,234244
3,kafka,897373
4,scrip,123947
5,bangk,627449
6,hadoop,13445
7,hadoop,23454
# 使用awk进行处理 -F指定分隔符 $1 为第一列 $2 为第二列 ,FS默认为空格,NF每一行的字段数,NR 第几行
[root@bigdata01 tmp]# cat tmpdata.txt |awk -F ',' '{print $1 "\t" $2 FS "\t" NF "\t" NR}'
1 hadoop, 3 1
2 spark, 3 2
3 kafka, 3 3
4 scrip, 3 4
5 bangk, 3 5
6 hadoop, 3 6
7 hadoop, 3 7
# 输出文件中的第二行并去重
[root@bigdata01 tmp]# cat tmpdata.txt |awk -F ',' '{print $2}'| uniq
hadoop
spark
kafka
scrip
bangk
hadoop
[root@bigdata01 tmp]#
# 输出文件中的第二行,按照第二行统计单词并去重,统计去重后的个数
[root@bigdata01 tmp]# cat tmpdata.txt |awk -F ',' '{print $2}'| uniq | wc -l
6
awkと上記の一般的なコマンドを組み合わせると、日常の使用シーンにほぼ対応できます