在文件score.txt中存有如下数据:(姓名 分数)
lisi 88
bokeyuan 97
zhangsan 77
wangwu 89
hongliu 92
zhanghua 97
在文件student.txt中存有:
zhangsan
hongliu
使用awk, cut, grep, find等任意shell脚本,输出student.txt所有学生的分数,即输出:
zhangsan 77
hongliu 92
如果只在score.txt中处理,可以很容易得写出
awk ' { if ($1 == "zhangsan") print $0} ' score.txt
但是结合另外一个文件,该怎么处理呢?
求人不如求自己,到处找了找处理方法,可以使用awk来处理多个文件,答案如下:
awk ' {if (ARGIND==1) grade[$1] = $0} {if (ARGIND>1 && ($1 in grade)) print grade[$1]} ' score.txt student.txt
简化版得写法为:
awk 'ARGIND==1 {grade[$1]=$0} ARGIND>1 && ($1 in grade) {print grade[$1]}' grade.txt student.txt
分析:
ARGIND==1处理第一个参数,即score.txt文件,或者用NR==FNR(
NR:表示awk开始执行程序后所读取的数据行数。
FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。
NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。
)
{grade[$1] = $0} 以grade.txt文件中的第一列为索引,将grade.txt中得内容存入grade数组中
if (ARGIND>1 && ($1 in grade)) print grade[$1] 如果处理的是第二个及以后的文件,即name.txt,检查第一列(姓名)是否在grade数组中,如果在,就打印以姓名为索引的grade信息。
相关推荐
- **diff** 命令用于比较两个文件之间的不同之处。 - `diff version1.txt version2.txt`:简单地列出两个文件之间的不同行。 - `diff -u version1.txt version2.txt > version.patch`:输出更为详细的差异信息,并...
- **diff**:显示两个文件之间的不同之处。 - **comm**:比较两个已排序文件的公共行和不同行。 - **dircmp**:比较两个目录的内容差异。 - **cut**:从每个输入行中提取字段。 - **paste**:将多个文件的行合并到...
7. **join**:将两个文件按公共字段连接。 - 示例:`join -1 1 -2 1 file1.txt file2.txt` 按第一列连接。 8. **paste**:将多个文件中的行合并在一起。 - 示例:`paste file1.txt file2.txt` 合并文件。 #### ...
- **用途**:查找两个文件之间的公共行。 32. **cp=CoPy** - **含义**:复制文件或目录。 - **用途**:将文件从一个位置复制到另一个位置。 33. **cpio=CoPy In and Out** - **含义**:存档工具。 - **用途**...
**用途**:`cmp` 命令用于比较两个文件的内容是否相同。 **示例**: ```bash cmp file1 file2 ``` --- #### 二十、col:格式化输入以便打印 **用途**:`col` 命令用于格式化输入,使得它更适合打印。 **示例**...
- **join**: 根据匹配字段合并两个文件。 - **cut**: 移除文本文件的某部分。 - **paste**: 将两个或多个文件合并。 - **split**: 将文件分割成不同的文件。 ### tr 用法 - **tr**: 用于替换或删除字符。 ### 登录...
5. **join**:基于共同字段合并两个文件的行。适用于数据库操作。 6. **split**:将文件分割成多个较小的文件。`split [filename] [prefix]`,用于处理超大文件。 7. **csplit**:根据上下文行分割文件。适合于按...
- `join`:根据公共字段合并两个文件。 - `split`:将大文件分割成较小的文件。 6. **脚本编写与自动化** - `bash`:Bourne Again Shell,一种广泛使用的shell。 - `cron`:用于计划在后台定期运行命令。 - `...
38. **cmp (compare)**:比较两个文件的差异。 39. **cobra (Common Object Request Broker Architecture)**:一种分布式计算架构。 40. **comm (common)**:比较两个已排序文件,并输出公共行。 41. **cp (CoPy)**...
- **用途**:显示文件内容或合并多个文件。 - **示例**:`cat file.txt` #### 11. **more - 分页显示文件内容** - **用途**:分页查看大文件内容。 - **示例**:`more largefile.txt` #### 12. **less - 类似...
8. **join**:连接两个已排序的文件,基于它们的公共字段。这对于合并来自多个来源的数据非常有用。 9. **wc**:计算文件中的单词数、行数和字符数。`wc -l file.txt`会显示`file.txt`的行数。 10. **split**:将...
数据联接是数据分析中的重要操作,tsv-utils支持将两个或多个TSV文件基于公共列进行联接,可以是内连接、左连接、右连接或全连接。这使得用户能够合并来自不同来源的相关数据,从而进行更深入的分析。 ### 5. **...
第一次`awk`用于找到正确的行,第二次`awk`用于分割冒号分隔的字段并获取第二个IP地址。 - `MASK`变量通过查找`Mask`相关的行,并提取第四字段来获取子网掩码。 - `ext_ip`变量利用`curl ifconfig.me`命令来获取当前...