文章851
标签121
分类10

AWK 简单操作笔记

AWK 是一种强大的文本处理工具,广泛用于数据提取和报告生成。它以行和列的方式处理文本文件,适合处理结构化数据。本文将介绍 AWK 的一些基本用法和常见操作。

1. AWK 基本语法

AWK 的基本语法如下:

awk 'pattern { action }' file
  • pattern:匹配模式,可以是条件语句。
  • action:对匹配行执行的操作。
  • file:要处理的文件。

2. 基本示例

2.1 打印文件的每一行

awk '{ print }' filename

这将打印文件 filename 中的每一行。

2.2 打印特定列

假设您有一个以空格分隔的文件,您可以打印特定列的数据。例如,打印第二列:

awk '{ print $2 }' filename

2.3 计算列的和

可以使用 AWK 计算某一列的总和。例如,如果想要计算第三列的总和:

awk '{ sum += $3 } END { print sum }' filename

2.4 使用条件

您可以根据条件过滤输出。例如,打印第三列大于 50 的行:

awk '$3 > 50 { print }' filename

3. 进阶用法

3.1 以特定分隔符处理数据

如果数据以逗号或其他字符分隔,可以使用 -F 选项指定分隔符。例如,处理以逗号分隔的 CSV 文件:

awk -F, '{ print $1, $3 }' filename.csv

3.2 处理多行数据

您可以基于某些条件处理多行数据。例如,打印连续几行中的某一列:

awk 'NR >= 5 && NR <= 10 { print $2 }' filename

3.3 使用内置变量

AWK 有一些内置变量可以使用:

  • NR:当前记录的行号。
  • NF:当前行的字段数。
  • $0:当前行的全部内容。

例如,打印每行的行号和字段数:

awk '{ print NR, NF }' filename

4. 结合其他命令使用

AWK 可以与其他命令结合使用。例如,结合 grep 进行更复杂的查询:

grep "pattern" filename | awk '{ print $1, $3 }'

5. 实用示例

5.1 从日志文件中提取信息

假设您有一个日志文件,您想提取错误信息:

awk '/ERROR/ { print $0 }' logfile.log

5.2 生成报告

您可以使用 AWK 生成简单的报告,例如计算每个用户的登录次数:

awk '{ count[$1]++ } END { for (user in count) print user, count[user] }' access.log

使用 curl 查询 IP 归属地

ipinfo.io

$ curl ipinfo.io

{
  "ip": "47.245.29.197",
  "city": "Tokyo",
  "region": "Tokyo",
  "country": "JP",
  "loc": "35.6895,139.6917",
  "org": "AS45102 Alibaba (US) Technology Co., Ltd.",
  "postal": "101-8656",
  "timezone": "Asia/Tokyo",
  "readme": "https://ipinfo.io/missingauth"
}

ip.me / ifconfig.me

$ curl ip.me

47.245.29.197

curl wttr.in 命令行查询天气

 curl wttr.in
Weather report: Tokyo, Japan

     \  /       Partly cloudy
   _ /"".-.     17 °C          
     \_(   ).   ↓ 19 km/h      
     /(___(__)  10 km          
                0.0 mm         
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  Mon 21 Oct ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│               Overcast       │               Cloudy         │               Cloudy         │               Overcast       │
│      .--.     17 °C          │      .--.     19 °C          │      .--.     19 °C          │      .--.     19 °C          │
│   .-(    ).   ↓ 21-24 km/h   │   .-(    ).   ↓ 17-20 km/h   │   .-(    ).   ↙ 17-22 km/h   │   .-(    ).   ↙ 17-22 km/h   │
│  (___.__)__)  10 km          │  (___.__)__)  10 km          │  (___.__)__)  10 km          │  (___.__)__)  10 km          │
│               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  Tue 22 Oct ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│  _`/"".-.     Patchy rain ne…│    \  /       Partly Cloudy  │               Cloudy         │    \  /       Partly Cloudy  │
│   ,\_(   ).   18 °C          │  _ /"".-.     21 °C          │      .--.     +23(25) °C     │  _ /"".-.     22 °C          │
│    /(___(__)  ↘ 16-20 km/h   │    \_(   ).   ↘ 15-17 km/h   │   .-(    ).   ↙ 7-10 km/h    │    \_(   ).   ↙ 5-7 km/h     │
│      ‘ ‘ ‘ ‘  10 km          │    /(___(__)  10 km          │  (___.__)__)  10 km          │    /(___(__)  10 km          │
│     ‘ ‘ ‘ ‘   0.0 mm | 70%   │               0.0 mm | 0%    │               0.0 mm | 0%    │               0.0 mm | 0%    │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
                                                       ┌─────────────┐                                                       
┌──────────────────────────────┬───────────────────────┤  Wed 23 Oct ├───────────────────────┬──────────────────────────────┐
│            Morning           │             Noon      └──────┬──────┘     Evening           │             Night            │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│               Overcast       │    \  /       Partly Cloudy  │     \   /     Clear          │  _`/"".-.     Patchy rain ne…│
│      .--.     21 °C          │  _ /"".-.     +24(26) °C     │      .-.      +25(27) °C     │   ,\_(   ).   +23(25) °C     │
│   .-(    ).   → 2-3 km/h     │    \_(   ).   ↑ 16-20 km/h   │   ― (   ) ―   ↑ 31-46 km/h   │    /(___(__)  → 10-15 km/h   │
│  (___.__)__)  10 km          │    /(___(__)  10 km          │      `-’      10 km          │      ‘ ‘ ‘ ‘  10 km          │
│               0.0 mm | 0%    │               0.0 mm | 0%    │     /   \     0.0 mm | 0%    │     ‘ ‘ ‘ ‘   0.0 mm | 79%   │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘

Follow @igor_chubin for wttr.in updates

2024-10-21T01:31:35.png

Linux 的目录结构

Linux 是一种类 Unix 操作系统,采用了一种特定的目录结构来组织文件和目录。这种结构遵循一个层次化的树形模型,根目录 / 是整个文件系统的起点。本文将介绍 Linux 的基本目录结构及其主要目录的用途。

1. 根目录 /

根目录是 Linux 文件系统的起点,所有其他文件和目录都是在此基础上构建的。根目录用符号 / 表示。

2. 主要目录及其用途

以下是 Linux 系统中一些常见的目录及其用途:

2.1 /bin

  • 用途:存放系统启动和基本操作所需的可执行文件,如常用命令(例如 lscpmv 等)。
  • 特点:所有用户都可以访问。

2.2 /boot

  • 用途:存放启动时所需的文件,包括 Linux 内核和引导加载程序(如 GRUB)。
  • 特点:该目录中的文件通常在系统启动时加载。

2.3 /dev

  • 用途:包含设备文件,这些文件代表系统中的设备(如硬盘、终端等)。
  • 特点:允许用户与设备进行交互。

2.4 /etc

  • 用途:存放系统配置文件和目录。大多数系统和服务的配置文件都在这里。
  • 特点:包含所有用户和程序的配置设置。

2.5 /home

  • 用途:每个用户的主目录都在此目录下,用户的个人文件和设置存放在这里。
  • 特点:通常,用户在这里有写权限。

2.6 /lib

  • 用途:存放系统和程序运行所需的共享库文件。
  • 特点:类似于 Windows 的 DLL 文件。

2.7 /media

  • 用途:用于挂载外部设备(如 USB 驱动器、CD-ROM 等)。
  • 特点:系统在插入外部设备时自动创建相应的子目录。

2.8 /mnt

  • 用途:用于临时挂载文件系统。系统管理员可以在此目录下手动挂载文件系统。
  • 特点:通常用于维护和临时访问。

2.9 /opt

  • 用途:用于存放附加软件包和应用程序,通常是第三方软件。
  • 特点:不属于标准 Linux 软件包管理系统。

2.10 /proc

  • 用途:一个虚拟文件系统,提供关于系统和进程的信息(如 CPU、内存等)。
  • 特点:这些文件不是实际存在的文件,而是内核提供的实时信息。

2.11 /root

  • 用途:超级用户(root 用户)的主目录。
  • 特点:与普通用户的主目录不同,具有更高的权限。

2.12 /run

  • 用途:存放运行时数据(如 PID 文件和套接字)。
  • 特点:在系统启动时创建,存储临时运行信息。

2.13 /srv

  • 用途:存放服务数据,如 HTTP、FTP 和其他服务所需的数据。
  • 特点:各服务的数据通常在此目录下组织。

2.14 /tmp

  • 用途:用于存放临时文件,任何用户都可以在这里读写文件。
  • 特点:系统会定期清理此目录。

2.15 /var

  • 用途:存放可变数据,如日志文件、邮件、缓存等。
  • 特点:内容会随着时间变化,因此不适合放置静态文件。

`.bashrc` 与 `.profile` 的区别

在 Linux 和类 Unix 系统中,.bashrc.profile 是两个重要的配置文件,它们用于配置用户的 shell 环境。尽管它们有相似的功能,但它们的用途和加载时机却有所不同。本文将详细介绍这两个文件的区别。

1. .bashrc

1.1 定义

.bashrc 是一个用于配置 Bash shell 的文件。它主要用于交互式非登录 shell 的初始化。在打开一个新的终端窗口时,.bashrc 文件会被自动执行。

1.2 用途

  • 环境变量:设置特定于终端的环境变量。
  • 别名:定义命令别名,例如:

    alias ll='ls -la'
  • 函数:定义 shell 函数,方便重复使用。
  • 提示符设置:定制命令提示符的外观。

1.3 何时加载

.bashrc 文件在每次打开新的终端窗口时加载,而不是在登录时加载。这意味着在打开多个终端时,.bashrc 每次都会被执行。

2. .profile

2.1 定义

.profile 是一个用于配置用户环境的文件,通常用于登录 shell。它是 Bourne shell 和大多数兼容的 shell(如 Bash)的初始化文件。

2.2 用途

  • 环境变量:设置全局环境变量,例如:

    export PATH="$HOME/bin:$PATH"
  • 启动程序:可以在登录时启动特定程序或服务。
  • 其他配置:设置其他与用户环境相关的配置。

2.3 何时加载

.profile 在用户登录时加载。这通常发生在用户通过控制台、SSH 或其他登录方式进入系统时。每个用户的 .profile 文件通常只会在登录时执行一次。

3. 主要区别

特性.bashrc.profile
类型用于非登录交互式 shell用于登录 shell
加载时机每次打开新终端登录时
配置内容别名、函数、终端特定设置环境变量、启动程序
适用的 shellBash兼容 Bourne shell 的 shell

4. 结合使用

在许多系统中,通常会在 .profile 中调用 .bashrc,以确保在登录 shell 中也能够加载 .bashrc 中的设置。可以在 .profile 中添加以下行:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

通过这种方式,无论您是通过登录 shell 还是非登录 shell,都会获得一致的环境配置。

">