awk如何向shell传值

简介: 今天写脚本,遇到awk脚本向shell传参的情况,上网谷歌一下,发现都有些麻烦,通过管道,通过eval,感觉都很复杂。于是想到用read来试一下。首先构造一个测试文件test.txt,里面的内容是1 2 3。

今天写脚本,遇到awk脚本向shell传参的情况,上网谷歌一下,发现都有些麻烦,通过管道,通过eval,感觉都很复杂。于是想到用read来试一下。

首先构造一个测试文件test.txt,里面的内容是1 2 3。

一开始尝试 

awk '{print $1 $2 $3}' test.txt | read a b c

可是echo $a,发现为空,失败了。

试了下

echo "1 2 3" | read a b c

也无法给a b c 赋值

看来read不是这样用的,怒谷歌之,在stackoverflow找到一个类似的问题(stackoverflow真神器啊!)

链接:http://stackoverflow.com/questions/374687/why-is-echo-foo-read-a-echo-a-not-working-as-expected

里面有答主提到,

read a < <(echo foo)

可以对a赋值,试了一下,果然可以。

然后尝试

read a b c< <(echo foo goo hoo)

也可以分别对a b c进行赋值!太激动了!

之后尝试

read a b c< <(awk '{print $1 $2 $3}' test.txt)

失败了,a的值变成了123,b,c为空。

这是为什么?因为awk没有打印空格,只打印123,理所当然都赋给a了。

所以,加上分隔符

read a b c< <(awk '{print $1 " " $2 " " $3}' test.txt)

这下就成功了!

考虑到我的awk还要更复杂一些,再做些改造

read a b c< <(grep 1 test.txt | awk '{test=$1;test2=$2;test3=$3}END{print test,test2,test3}')

也成功了!

所以,awk可以通过这样的方式向shell传值。

目录
相关文章
|
6月前
|
运维 Shell C语言
运维(20)- shell awk
运维(20)- shell awk
36 0
|
5月前
|
Shell 数据处理 Perl
shell脚本里的三剑客之一awk
shell脚本里的三剑客之一awk
58 2
|
5天前
|
Shell Linux Perl
Linux|如何允许 awk 使用 Shell 变量
Linux|如何允许 awk 使用 Shell 变量
14 2
|
5天前
|
存储 Shell 索引
第七章 Shell文本处理三剑客之awk
第七章 Shell文本处理三剑客之awk
|
5天前
|
Shell Perl
shell学习(十) 【shell awk基本语法】
shell学习(十) 【shell awk基本语法】
11 1
|
5天前
|
存储 Shell Linux
【Shell 命令集合 文件管理】Linux 文本处理工具 awk命令使用指南
【Shell 命令集合 文件管理】Linux 文本处理工具 awk命令使用指南
44 0
|
8月前
|
关系型数据库 MySQL Shell
数据库备份和Shell基础测试及AWK(运维)
数据库备份和Shell基础测试及AWK(运维)
|
9月前
|
Shell Linux Perl
Shell 基本(整数、小数、浮点数)运算($[]、$(())、let、expr、awk、bc)
Shell 基本(整数、小数、浮点数)运算($[]、$(())、let、expr、awk、bc)
172 0
|
11月前
|
Unix Shell Linux
【Shell编程】字符截取命令awk、sed命令
【Shell编程】字符截取命令awk、sed命令
170 0
|
11月前
|
Unix Shell Linux
两个实用的shell命令:sed和awk用法
两个实用的shell命令:sed和awk用法
96 0