首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

awk:为什么保存在数组中的列不能打印出来?

awk是一种文本处理工具,它可以逐行扫描文件并执行指定的操作。在awk中,可以使用数组来存储和操作数据。

对于保存在数组中的列不能打印出来的问题,可能是因为在awk中,默认情况下,数组是以字符串作为索引的。当我们将列作为数组的索引时,awk会将其转换为字符串类型。这就意味着,如果列的值是数字类型,那么在数组中存储时会被转换为字符串,可能会导致无法正确打印出来。

为了解决这个问题,我们可以使用一些技巧来确保数组中的列能够正确打印出来。一种方法是将列的值转换为字符串类型,可以使用awk内置的函数"strval()"来实现。例如,可以使用"strval($1)"来将第一列的值转换为字符串类型。

另一种方法是使用awk的内置变量"CONVFMT"来控制数字转换为字符串的格式。可以将"CONVFMT"设置为"%.0f",这样就可以将数字转换为字符串时去掉小数部分。例如,可以使用"CONVFMT="%.0f"; print array[strval($1)]"来打印数组中保存的列。

总结起来,保存在数组中的列不能打印出来的原因是因为默认情况下数组以字符串作为索引,而列的值可能是数字类型。为了解决这个问题,可以使用"strval()"函数将列的值转换为字符串类型,或者使用"CONVFMT"变量控制数字转换为字符串的格式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 GROUP BY 之后不能直接引用原表中的列

为什么 GROUP BY 之后不能直接引用原表(不在 GROUP BY 子句)中的列 ? 莫急,我们慢慢往下看。...,SELECT 的列不能直接包含非 GROUP BY 子句中的列。...通过上图,相信大家也都能看到,这里不做更深入的讲解了,有兴趣的可以去查相关资料。 为什么聚合后不能再引用原表中的列   很多人都知道聚合查询的限制,但是很少有人能正确地理解为什么会有这样的约束。...SQL 的世界其实是层级分明的等级社会,将低阶概念的属性用在高阶概念上会导致秩序的混乱,这是不允许的。此时我相信大家都明白:为什么聚合后不能再引用原表中的列 。...SELECT 子句中不能直接引用原表中的列的原因;   3、一般来说,单元素集合的属性和其唯一元素的属性是一样的。

1.7K10
  • 在vue的v-for中,key为什么不能用index?

    写在前面在前端中,主要涉及的基本上就是 DOM的相关操作 和 JS,我们都知道 DOM 操作是比较耗时的,那么在我们写前端相关代码的时候,如何减少不必要的 DOM 操作便成了前端优化的重要内容。...,这样子我们就把整个 DOM 通过 JS 模拟出来了,然后呢?...DOM 更新操作Vue 源码中的 diff 算法patch.js 路径Vue 中的 diff 算法相关代码主要在 patch.js 文件中,路径如下图图片patch 函数图片1、如果新节点不存在(vnode...v-for 中 key 值是否可以为 index答案当然是不可以,举个例子,我们来看下面两个 vdom,从 num 值我们可以发现,新、旧两个 vdom 是两个顺序相反的数组生成的 vdom,安装正常的方式...,体会到了前端对于性能的极致追求,通过通读 vdom 源码,基本能够从更加深刻的角度去理解采用 VDOM 的目的,以及 key 值在 diff 算法中的真正作用,也能够从更加底层的角度理解为什么不推荐使用

    1.1K10

    在vue的v-for中,key为什么不能用index?4

    写在前面在前端中,主要涉及的基本上就是 DOM的相关操作 和 JS,我们都知道 DOM 操作是比较耗时的,那么在我们写前端相关代码的时候,如何减少不必要的 DOM 操作便成了前端优化的重要内容。...,这样子我们就把整个 DOM 通过 JS 模拟出来了,然后呢?...DOM 更新操作Vue 源码中的 diff 算法patch.js 路径Vue 中的 diff 算法相关代码主要在 patch.js 文件中,路径如下图图片patch 函数图片1、如果新节点不存在(vnode...v-for 中 key 值是否可以为 index答案当然是不可以,举个例子,我们来看下面两个 vdom,从 num 值我们可以发现,新、旧两个 vdom 是两个顺序相反的数组生成的 vdom,安装正常的方式...,体会到了前端对于性能的极致追求,通过通读 vdom 源码,基本能够从更加深刻的角度去理解采用 VDOM 的目的,以及 key 值在 diff 算法中的真正作用,也能够从更加底层的角度理解为什么不推荐使用

    1.1K50

    神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列

    为什么 GROUP BY 之后不能直接引用原表(不在 GROUP BY 子句)中的列 ? 莫急,我们慢慢往下看。...、HAVING 或者 ORDER BY 子句的列,没有在GROUP BY中出现,那么这个SQL是不合法的     ANSI_QUOTES       启用 ANSI_QUOTES 后,不能用双引号来引用字符串...通过上图,相信大家也都能看到,这里不做更深入的讲解了,有兴趣的可以去查相关资料。 为什么聚合后不能再引用原表中的列   很多人都知道聚合查询的限制,但是很少有人能正确地理解为什么会有这样的约束。...SQL 的世界其实是层级分明的等级社会,将低阶概念的属性用在高阶概念上会导致秩序的混乱,这是不允许的。此时我相信大家都明白:为什么聚合后不能再引用原表中的列 。...SELECT 子句中不能直接引用原表中的列的原因;   3、一般来说,单元素集合的属性和其唯一元素的属性是一样的。

    2.2K20

    nextline函数_在JAVA中Scanner中的next()和nextLine()为什么不能一起使用?

    、tab 键、enter 键都不能当作结束符。...输入 2: 2 abc cba efg gfe 结果 2: str[0] = “abc” str[1] = “cba” 原因:next() 方法在遇到有效字符前所遇到的空格、tab 键、enter 键都不能当作结束符...回车符 “\r” 它被丢弃在缓冲区中,现在缓冲区中,只有一个 \r ,于是 下一次 nextLine 扫描的时候就又扫描到了 \r,返回它之前的内容,也是啥都没有 “” ,然后再把 \r 去掉, 对于...,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。...这个扫描器在扫描过程中判断停止的依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列的,也就是下面这些函数:next nextInt nextDouble nextFloat

    2.7K10

    文本处理三驾马车之 awk

    ,通常是文件的一行,保存在字段变量 0中,记录可以被分割成字段,保存在变量 1, 2,..., NF 中。...表达式与操作符 Awk 表达式的符号与 C 语言的类似,基本的表达式有数字,字符串,变量,字段,数组以及函数调用。变量无需声明,它们在首次使用时被初始化为null。...awk '{print $1}' file # 打印第一列 awk '{print $2}' file # 打印第二列 awk '{print $NF}' file # 打印最后一列 awk '{print...$(NF-1)}' file#打印倒数第二列 awk -F ';' -v OFS='\t''{print $1,$2,$NF}' file # 读入的文件以逗号;分隔列,打印第1列,第2列和最后一列,...# 打印第2列大于100的行 awk 'NR>1 && NR打印第2~3行 awk '/EGFR/' file # 打印含有EGFR的行,相当于grep EGFR

    17210

    shell文本处理工具sed、cut、awk

    :在找到匹配内容时所执行的一系列命令 选项参数 -F: 指定输入文件折分隔符 -v(小写): 赋值一个用户定义变量(action1里面是不能引用awk外面的变量) 自定义变量(-v) awk -v x=...'{print $1}' /tmp/hosts #指定.作为行分隔符 OFS 保存的是输出字段的分隔符(列分隔符),默认为空格 awk -v OFS="-" '{print $1,$2}' /tmp...1 列和第 6 列,以--分割,且在开头第一行的上面添加一行列名“1 列”“6 列”,以--分隔,在最后一行的下面添加一行内容"这是所有的以 a 开头的行的 1、6 两列"。...i,a[i]} \ > }' 因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。...由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的 for循环 for(表达式;表达式;表达式) { 动作指令序列 } awk 'BEGIN{ for (i

    57020

    Linux常用命令面试题(1)

    该行统计结束后,最后要打印一个回车符,然后继续下一行的统计。 printf "\n" 那么问题来了,此时是不是应该将数组a中的元素清除??...: (1)第一个awk:将所需要的字段匹配打印出来 通过执行第一个awk语句,可以输出下列格式: 0001 100 2 0001 300 4 0003 500 12 0004 200 8 awk '{match...(2)print部分 print a[1],a[2],a[3]; 这个语句的作用就是:将每行统计数组a中的各个统计项打印出来。...总结:第一个awk的作用是将我们需要的字段匹配出来,并统计好,打印出来。...通过执行下面语句,可以将汇总字典a中的各项内容清晰打印出来: END{for(i in a) print i,a[i][0],a[i][1]} 其中,i是广告商ID,a[i][0]是该广告商的广告展示数

    1.4K10

    如何用 awk 删除文件中的重复行【Programming】

    摘要 要删除重复的行,同时保留它们在文件中的顺序,请使用: awk '!...我们不必初始化它,因为awk会在我们第一次访问它时进行初始化。 $0变量用于保存当前正在处理的行的内容。...visited [ $0]访问存储在映射中的值,其键值等于$0(正在处理的行),也称为匹配项(我们将会在下面设置)。 取非(!)的值:在awk中,任何非零数字值或任何非空字符串值均为true 。...否则,不执行操作,也不打印任何内容。 为什么不使用 uniq 命令? uniq命令仅除去相邻的重复行 。...abc ghi def xyz klm 参考资料 Gnu awk 用户指南 awk 中的数组 Awk真值 Awk 表达式 如何在Unix中删除文件中的重复行? 删除重复行而不排序 awk '!

    8.7K00

    shell 学习笔记(16)

    1504.Read-only file system:文件系统只读 如果/data在/分区上:mount -o remount /data,其实/分区也可以remount的,只是不能umount..." # awk以单引号为分隔符,所以里面不能用单引号。...sed -r 's/\s+//' 1549.awk的asorti 是把下标按字典排序,可以得到新的下标数组与数组长度,二次引用即可获取原数组 value awk '{n=$1;getline...1568.test -n/[ -n ] 问题: 在[ ]中, 如果只有一个参数, 那这个参数就被当成一个普通的字符串,并用 -n 测试其长度, 比如, [ -gt...tar.gz 1589.vim 列模式: 将光标放在需要选择列的第一个字符上,在一般模式中,按下“Ctrl+v”, 然后使用“↓”或“↑”进行块字符的选择,选中的地方会反白显示

    1.5K100

    awk命令详解+示例

    的内置变量 变量 用途 示例 FS 保存或设置字段分隔符,如FS=”:” $n 指定分隔的第n个字段,如$1、$3分别表示第1、第3列 awk -F: ‘{print “用户名:”$1}’ /etc/...+} END{print x}’ /etc/passwd 统计本机中系统用户的个数:# awk -F: ‘$3<1000{x++} END{print x}’ /etc/passwd 在实际工作中,利用...综计文件中以“:”分隔的总字段个数:(需要每处理一行时将当前行的字段数(内置变量NF)计和,因此可在BEGIN时定义一个初始变量,过程称求和,最后在END时输出结果) # awk -F: ‘BEGIN{...)提取出来 找到使用bash作登录Shell的本地用户;列出这些用户的shadow密码记录 按每行“用户名 –> 密码记录”保存到getupwd.log #/bin/bash ## 创建空文件 > /tmp...###筛选A文件中第六列和七列都大于5的数据,显示所有符合的结果 awk '{if ($6>5 || $7>5) print}' A|less ###筛选A文件中第六列或七列都大于5的数据,显示所有符合的结果

    2.6K10

    Awk学习笔记

    域 记录中每个单词称做“域”,默认情况下以空格或tab分隔。awk可跟踪域的个数,并在内建变量NF中保存该值。...如$ awk '{print $1,$3}' test将打印test文件中第一和第三个以空格分开的列(域)。 6.3. 域分隔符 内建变量FS保存输入域分隔符的值,默认是空格或tab。...test匹配,就把第二个域的值加上第三个域的值,并把结果赋值给变量count,最后打印出来。...在awk脚本中,这些变量使用起来就象是在脚本中建立的一样。注意,如果参数前面出现test,那么在BEGIN语句中的变量就不能被使用。...数组 awk中的数组的下标可以是数字和字母,称为关联数组。 14.7.1. 下标与关联数组 用变量作为数组下标。

    2.4K30

    Linux生产环境上,最常用的一套“AWK“技巧

    打印某一列 下面,这几行代码的效果基本是相同的:打印文件中的第一列。...命令 awk '{print $1}' file 这可能是awk最常用的功能了:打印文件中的某一列。...它智能的去切分你的数据,不管是空格,还是TAB,大概率是你想要的。 对于csv这种文件来说,分隔的字符是,。AWK使用-F参数去指定。以下代码打印csv文件中的第1和第2列。...一般的开发语言,数组下标是以0开始的,但awk的列$是以1开始的,而0指的是原始字符串。 网络状态统计 本小节,采用awk统计netstat命令的一些网络状态,来看一下awk语言的基本要素。...注意点 1、awk的主程序部分使用单引号‘包围,而不能是双引号 2、awk的列开始的index是0,而不是1 例子 我们从几个简单的例子,来看下awk的作用。

    88410

    快速理解linux文本分析利器awk

    }' 这个命令的结果是只显示文件名列表 工作过程 awk命令接收 ll 结果信息,并逐行处理 对每一行结果记录按空格(空格是默认分隔符)分割,并打印出第9列的信息 语法说明 单引号('')里面的部分是...awk要执行的内容,花括号({})中是一个代码块,单引号中可以有多个花括号部分 print是一个输出命令 $9 表示分割结果中的第9列内容,分割结果相当于一个数组,从 0-n,$0 是没分割的整行内容...:"$0}' /etc/passwd awk还内置了一些有用的变量,例如这个命令中打印出了 ‘文件名’ - FILENAME ‘行号’ - NR ‘列号’ - NF (5)awk -F ':' '...END{print size/1024/1024,"M"} 中,对 size 值转换为M,然后打印出来 (7)ls -l |awk 'BEGIN {size=0;} {if($5!...4096 awk中的条件语句是从C语言中借鉴来的,支持 if、while、do/while、for、break、continue --- 通过上面的几个例子,已经可以看到awk的概貌,也可以理解了为什么

    1.2K80

    linux实战(一)

    在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。...保持和获取h命令和G命令 $ sed -e '/test/h' -e '$G example 在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上...input-file(s) 是待处理的文件。 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。...这里大概给出awk中的一些学习目录如下: print和printf awk中同时提供了print和printf两种打印输出的函数。 其中print函数的参数可以是变量、数值或者字符串。...[end]user count is 40 运算 我们需要统计某个文件夹下的文件占用的字节数 因为文件占用的字节数 在 ls -l命令中的第5列 所以我们使用如下命令: ls -l |awk 'BEGIN

    2.2K10

    生信人的自我修养:Linux 命令速查手册(全文引用)

    ,通常是文件的一行,保存在字段变量 0中,记录可以被分割成字段,保存在变量 1, 2,..., NF 中。...表达式与操作符 Awk 表达式的符号与 C 语言的类似,基本的表达式有数字,字符串,变量,字段,数组以及函数调用。变量无需声明,它们在首次使用时被初始化为null。...file # 打印整行 awk '{print $1}' file # 打印第一列 awk '{print $2}' file # 打印第二列 awk '{print $NF}' file # 打印最后一列...awk '{print $(NF-1)}' file#打印倒数第二列 awk -F ';' -v OFS='\t' '{print $1,$2,$NF}' file # 读入的文件以逗号;分隔列,打印第...> 100' file # 打印第2列大于100的行 awk 'NR>1 && NR打印第2~3行 awk '/EGFR/' file # 打印含有EGFR的行,相当于grep

    4K40

    awk 简单使用教程

    - 打印第一个和第四个列:`awk '{print $1,$4}' awk.txt`- 打印全部内容:`awk '{print $0}' awk.txt`$NF表示最后一列,$(NF-1)倒数第二列...通过为输入的分隔符变量制定相应分割方式,来更好的处理文本,而输出的分隔符变量则可以让我们在保存处理后的数据时更加灵活。...awk -F "\t" '{OFS="\t"} {if ($4==3) $4=5}1' test.txt 上述命令指定输入分隔符为TAB,如果第4个字段为3,则将其替换为5,然后打印出来({}后跟1表示打印...),打印的域分隔符为TAB## awk使用### BEGIN和END- BEGIN模块后紧跟着动作块,这个动作块在awk处理任何输入文件之前执行,所以它可以在没有任何输入的情况下进行测试,它通常用来做一些执行真正的文本处理之前的预处理工作...下面展示一些不同的匹配的写法:打印域匹配的行 awk -F: '{if($3==0) print}' /etc/passwd 匹配大于7列的行,打印列数和整行 awk -F: 'NF>7 {

    18700
    领券