2014-01-18 19 views
0

我正在学习shell脚本。我写了一个脚本,指标均在以下选项卡中的当前工作目录中的文件和文件夹分隔格式,如何在文件中搜索shell中字符串的特定列?

路径文件名文件/目录上次修改日期大小文本文件(Y/N)

例如两在我的文件“index.txt”是,

home/Desktop/C C d Thu Jan 16 01:23:57 PST 2014 4 KB N 
home/Desktop/C/100novels.txt 100novels.txt f Thu Mar 14 06:04:06 PST 2013 0 KB Y 

线现在,我要再写剧本搜索从以前的文件,它接受命令行参数,文件名的文件。还有可选参数,如-dir(如果只搜索目录),-date DATE(最后修改日期),-t(仅适用于文本文件)等。如何去解决这个问题?

我知道在文件中搜索字符串的grep命令,但假设我输入了一个文件名,它将搜索整个文件中的文件名,而不是仅搜索文件名列。我该怎么做呢?有没有其他的命令来实现这个目标?

回答

0

您可以使用awk命令来执行操作。例如,要打印使用AWK文件的第一列:

awk -F ":" '{print $1}' /etc/passwd 

(注意-F标志是选择列字段分隔符,你的情况,你不需要它)。然后你可以使用grep来过滤该列。祝你好运!

+0

我想在一个特定字符串的特定列中搜索...如何做到这一点? – achiever202

1

“我想在特定字符串的特定列中搜索......怎么做?”

例如,要搜索目录:

awk -F '\t' '$3 == "d"' filename 

您还可以通过正则表达式或字符串匹配搜索。请在学习中发表更多问题。

单引号可防止变量替换(和其他形式的扩展) - see the bash manual。所以,你必须通过其他手段来传递值:

awk -F'\t' -v s="$search_file" '$2 == s' ./index.txt > final.txt 

,或者用双引号,比较脆弱,难以阅读IMO

awk -F'\t' "\$2 == \"$search_file\"" ./index.txt > final.txt 

而且,你不要混用单引号和双引号。选择一个或另一个,取决于你需要的功能。

+0

我这样做是为了搜索作为第一个参数传递的文件名“awk -F'\ t”'“$ 2 ==”$ search_file“'./index.txt> final.txt”但是,似乎没有任何事情发生。你能帮忙吗? – achiever202

相关问题