shell脚本中使用awk的疑惑,请帮忙

BaiYangSpirit 2009-06-27 04:02:05
#!/bin/sh

for file_name in `ls src`
do
echo ${file_name}
awk -F ";" '{if($4 == ?????) print}' ${file_name} >> list
done;

我要检索src目录中的文件,对每一个文件进行分析,如果文件的第4个字段符合一定条件,比如说,第4个字段是"a123",则将这些符合条件的记录保存成另外一个文件;该条件,我想在整个shell脚本的$1参数地方体现。

如上脚本,我现在想在?????处引用该shell脚本的第一个参数$1,请问,?????该怎么写?
...全文
547 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuijie_cn 2009-06-30
  • 打赏
  • 举报
回复
原来还有那么多种方法,学习了
threeleafzerg007 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mymtom 的回复:]
当然是用-v参数
Perl code$ lf
awkvar*src/$ cat awkvar#! /bin/shfiles=`ls src/*`forfile_name in ${files}doawk-F":"-v country=China'{ if($4 == country) print }'${file_name}
done

$ ls src
software.txt whoiswho.txt
$ cat src/*Microsoft:Windows:XP:USA
SCO:SCOOpenServer:5.0.5:USA
Kingsoft:Power Dict:2006:China
Tongtech:TongLINK/Q:6.3:China
Bill Gates:Micosft:CEO:USA
Liu Chuanzhi:Lenovo:CEO:China
$…
[/Quote]

顶这个了 awk 的外参标准格式 就是这个鸟
mymtom 2009-06-29
  • 打赏
  • 举报
回复

#! /bin/sh

for f in "`ls src/*`"
do
awk -F ":" '$4 == "'"$1"'" || $2 == "'"$2"'" { print }' ${f}
done

执行结果如下:
./sh2awk China "SCO Open Server"
SCO:SCO Open Server:5.0.5:USA
Kingsoft:Power Dict:2006:China
Tongtech:TongLINK/Q:6.3:China
Liu Chuanzhi:Lenovo:CEO:China
mymtom 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 steptodream 的回复:]
其实不用你们讲的那么麻烦
直接把楼主说的????变成"'$1'"即可 即双引号单引号$1单引号双引号

我测试过 也这么用过


#!/bin/sh

for file_name in `ls src`
do
echo ${file_name}
awk -F ";" '{if($4 == "'$1'") print}' ${file_name} >> list
done;

[/Quote]
说的没错,俺也是试验了一下,后来在网上找的这么一个帖子,说的比较全面:
http://www.lazysa.com/2009/06/490.html
所以俺把上面的改了改

#! /bin/sh

for f in "`ls src/*`"
do
awk -F ":" '$4 == "'"$1"'" || $2 == "'"$2"'" { print }' ${f}

steptodream 2009-06-29
  • 打赏
  • 举报
回复
其实不用你们讲的那么麻烦
直接把楼主说的????变成"'$1'"即可 即双引号单引号$1单引号双引号

我测试过 也这么用过


#!/bin/sh

for file_name in `ls src`
do
echo ${file_name}
awk -F ";" '{if($4 == "'$1'") print}' ${file_name} >> list
done;
dinghdong 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 puheavy123 的回复:]
只有一种方法,而且必须严格按照格式,假如是第一个参数的话,则为

'"${1}"'


有不明白的地方可以问我。。

算了,我写出来给你看吧。。。。。。。。

[root@manifold ~]# ls
anaconda-ks.cfg Desktop install.log install.log.syslog test2.sh test.sh
[root@manifold ~]# cat test.sh
#!/bin/sh

for file_name in `ls /root`
do
echo ${file_name}
awk -F ";" '{if($4 ==…
[/Quote]
mymtom 2009-06-28
  • 打赏
  • 举报
回复
当然是用-v参数

$ lf
awkvar* src/
$ cat awkvar
#! /bin/sh

files=`ls src/*`
for file_name in ${files}
do
awk -F ":" -v country=China '{ if($4 == country) print }' ${file_name}
done

$ ls src
software.txt whoiswho.txt
$ cat src/*
Microsoft:Windows:XP:USA
SCO:SCO Open Server:5.0.5:USA
Kingsoft:Power Dict:2006:China
Tongtech:TongLINK/Q:6.3:China
Bill Gates:Micosft:CEO:USA
Liu Chuanzhi:Lenovo:CEO:China
$ ./awkvar
Kingsoft:Power Dict:2006:China
Tongtech:TongLINK/Q:6.3:China
Liu Chuanzhi:Lenovo:CEO:China
puheavy123 2009-06-27
  • 打赏
  • 举报
回复
只有一种方法,而且必须严格按照格式,假如是第一个参数的话,则为

'"${1}"'


有不明白的地方可以问我。。

算了,我写出来给你看吧。。。。。。。。

[root@manifold ~]# ls
anaconda-ks.cfg Desktop install.log install.log.syslog test2.sh test.sh
[root@manifold ~]# cat test.sh
#!/bin/sh

for file_name in `ls /root`
do
echo ${file_name}
awk -F ";" '{if($4 == '"${1}"') print}' ${file_name} >> list
done;

[root@manifold ~]# cat test2.sh
manifold;manifold2;manifold3;1234;end
[root@manifold ~]# ls
anaconda-ks.cfg Desktop install.log install.log.syslog test2.sh test.sh
[root@manifold ~]# sh test.sh 1234
anaconda-ks.cfg
Desktop
awk: cmd. line:1: fatal: file `Desktop' is a directory
install.log
install.log.syslog
test2.sh
test.sh
[root@manifold ~]# ls
anaconda-ks.cfg Desktop install.log install.log.syslog list test2.sh test.sh
[root@manifold ~]# cat list
manifold;manifold2;manifold3;1234;end
[root@manifold ~]#


19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧