`
zfy421
  • 浏览: 234175 次
社区版块
存档分类
最新评论

shell练习题四

阅读更多

有两个文本A.txt和B.txt,内容如下:
A.txt:
line1 123
line2 234
line3 345
line4 456

B.txt:
234
456

怎么样才能得到文本C.txt, 将文本A.txt中第2列数据含有文本B.txt的行标出,得到结果如(比如在第1列末尾加[*]):
C.txt:
line1        123
line2[*]    234
line3        345
line4[*]    456

 

awk 'NR==FNR{a[$0];next}$2 in a{$1=$1"[*]"}1' B.txt A.txt
awk 'NR==FNR{a[$0];next} {if ($2 in a){$1=$1"[*]";print $0}}' B.txt A.txt

 

awk 'NR==FNR{a[$0]=$0;next}{for(i in a){if(a[i]==$2)t=$1"[*]"}printf("%-10s%s\n",t?t:$1,$2);t=""}' B.txt A.txt

 

 NR,表示awk开始执行程序后所读取的数据行数.

FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计.

下面看两个例子:

1,对于单个文件NR 和FNR 的 输出结果一样的 :

# awk '{print NR,$0}' file1 
1 a b c d
2 a b d c
3 a c b d

#awk '{print FNR,$0}' file1 
1 a b c d
2 a b d c
3 a c b d 

2,但是对于多个文件 :

# awk '{print NR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
4 aa bb cc dd
5 aa bb dd cc
6 aa cc bb dd

# awk '{print FNR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
1 aa bb cc dd
2 aa bb dd cc
3 aa cc bb dd

在看一个例子关于NR和FNR的典型应用:

现在有两个文件格式如下:

#cat account
张三|000001
李四|000002
#cat cdr
000001|10
000001|20
000002|30
000002|15

想要得到的结果是将用户名,帐号和金额在同一行打印出来,如下:

张三|000001|10
张三|000001|20
李四|000002|30
李四|000002|15

执行如下代码

#awk -F \| 'NR==FNR{a[$2]=$0;next}{print a[$1]"|"$2}' account cdr

注释:

由NR=FNR为真时,判断当前读入的是第一个文件account,然后使用{a[$2]=$0;next}循环将account文件的每行记录都存入数组a,并使用$2第2个字段作为下标引用.

由NR=FNR为假时,判断当前读入了第二个文件cdr,然后跳过{a[$2]=$0;next},对第二个文件cdr的每一行都无条件执行{print a[$1]"|"$2},此时变量$1为第二个文件的第一个字段,与读入第一个文件时,采用第一个文件第二个字段$2为数组下标相同.因此可以在此使用a[$1]引用数组。

分享到:
评论

相关推荐

    LINUX SHELL命令练习题

    LINUX SHELL 命令练习题 本次练习题涵盖了 LINUX SHELL commands 的多个方面,包括文件类型的确定、文件权限的修改、目录管理、文件重命名、系统初始化信息、系统启动级别的切换、后台执行程序、vi 编辑器的使用等...

    shell脚本练习题

    下面将逐一解析这些练习题涉及的关键知识点。 ### 练习一:向用户问候及统计用户数量 这个练习的目标是读取 `/etc/passwd` 文件中的每一行,提取用户名和用户ID,并向每个用户发送问候语,同时统计用户总数。这里...

    bash shell 练习题

    Bash Shell 练习题 本资源总结了 Bash Shell 的练习题,旨在帮助用户更好地学习和掌握 Bash Shell 的使用。该资源涵盖了多个方面的知识点,包括变量、命令、文件操作、过程控制、输入输出等。 一、变量 1.1 更改 ...

    shell编程题目练习

    shell编程题目练习,练习基本的shell编程,学习脚本语言,提高效率

    Shell编程练习题.pdf

    以下是四个 Shell 编程练习题的解析: 练习题 1:显示文字、长格式显示文件和目录、定义变量 该练习题要求编写一个 Shell 脚本,完成三个任务:显示文字“Waiting for a while….”、长格式显示当前目录下的文件和...

    shell练习题

    shell练习题,很全,不错,还可以,努力吧,学习ing......

    linux操作题及答案shell练习题.pdf

    Linux 操作题及答案 Shell 练习题 本文档涵盖了 Linux 操作系统中的一些基本概念和技术,包括文件权限、用户和组管理、文件操作、目录管理、cron 任务计划和 at 命令等。通过对实践题目和答案的解析,我们将探索 ...

    shell脚本练习题.docx

    shell脚本练习题集锦 本资源提供了一系列的 shell 脚本练习题,涵盖了基本的 shell 编程概念和技术,旨在帮助用户掌握 shell 编程的基本技能和思想。下面是本资源中涉及到的知识点: 1. 变量的使用:在shell脚本中...

    shell脚本练习题.pdf

    shell脚本练习题 shell脚本是一种强大的自动化工具,可以自动完成各种任务。本文将通过多个实践练习题,帮助读者学习shell脚本的编写和应用。 练习一:统计用户数 在 Linux 系统中,/etc/passwd 文件中存储着系统...

    shell练习题1.doc

    这些题目涵盖了Linux Shell脚本编程的一些基础知识点,包括文件属性检查、用户与组管理、文件与目录操作、循环与条件判断、时间调度以及简单的数学运算。下面分别对这些知识点进行详细解释: 1. **文件属性判断与...

    Shell编程练习题.docx

    标题中的“Shell编程练习题.docx”提示我们这是一份关于Shell脚本编程的练习资料。描述部分没有给出具体信息,所以我们主要依据标签“互联”和“cs”以及部分内容来展开讨论。 在Shell编程中,我们经常会遇到各种...

    shell脚本练习题.doc

    根据给定文件的信息,我们可以提炼出与Shell脚本相关的知识点,包括基础概念、变量设置、命令行工具的应用等。下面将详细阐述这些知识点。 ### Shell脚本基础 #### 1. Shell简介 Shell是Unix/Linux操作系统的核心...

    linux中shell练习-习题5

    ### Linux中Shell练习-习题5 #### 一、Linux 下执行 Shell 脚本的方式 在 Linux 系统中,执行 Shell 脚本有两种主要的方法:通过 shell 程序来执行脚本和直接执行脚本。 ##### 1. 通过 shell 程序执行脚本 这种...

    LINUXSHELL命令练习题[参考].pdf

    LINUX SHELL 命令练习题 本资源摘要信息旨在总结 LINUX SHELL 命令练习题中的知识点,涵盖 Linux 操作系统的基础知识、命令行操作、文件管理、权限控制、系统配置等方面。 1. Linux 核心的许可证是 GPL(General ...

    Linux运维-3.Shell编程-11shell基础-119四则运算练习题1.avi

    Linux运维-3.Shell编程-11shell基础-119四则运算练习题1.avi

    LinuxShell自动化运维-课后习题答案.docx

    Linux Shell 自动化运维课后习题答案 本文档提供了 Linux Shell 自动化运维课后习题答案,涵盖了 Linux Shell 编程、自动化运维等方面的知识点。 一、Shell 编程基础 1. Shell 变量:在 Shell 中,可以使用变量来...

    这是linux之shell练习的题目

    4. **删除 `/etc/fstab` 文件中所有以 `#` 开头,后面至少跟一个空白字符的行的行首的 `#` 和空白字符** 使用 `sed` 命令去除这些字符: ```bash sed -i '/^#/s/^[#][[:space:]]*//' /etc/fstab ``` 以上就是...

    linux练习题

    "Linux练习题"这个压缩包文件提供了一系列题目,旨在帮助学习者深入理解和应用Linux操作系统的基础知识。通过解答这些题目,你可以强化对命令行操作、文件系统管理、权限控制、进程管理等多个方面技能的理解。 1. *...

    awk-sed高级练习题pdf

    ### awk & sed 高级练习题解析 #### sed 命令详解 1. **删除一个文件的每行中的第1个字符** ```shell sed 's/^.//g' /etc/passwd ``` - **解析**:`s/^.//g` 表示将每行开头(`^`)的第一个字符(`.`)替换为...

Global site tag (gtag.js) - Google Analytics