Linux 如何在文件中的特定列中搜索shell中的字符串?

Linux 如何在文件中的特定列中搜索shell中的字符串?,linux,bash,shell,unix,scripting,Linux,Bash,Shell,Unix,Scripting,我正在学习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 PS

我正在学习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命令可以在文件中搜索字符串,但是假设我输入了文件名,它会在整个文件中搜索文件名,而不是只搜索filename列。我该怎么做?有没有其他命令可以实现这一点?

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

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

(注意,-F标志是为列选择字段分隔符,在您的情况下,您不需要它)。然后您可以使用grep在该列中进行筛选。祝你好运

“我想在特定列中搜索特定字符串……如何执行?”

例如,要搜索目录,请执行以下操作:

awk -F '\t' '$3 == "d"' filename
也可以通过正则表达式或子字符串匹配进行搜索。请在学习时发布更多问题

单引号防止变量替换(和其他形式的扩展)--。因此,您必须通过其他方式传递值:

awk -F'\t' -v s="$search_file" '$2 == s' ./index.txt > final.txt
或者,使用双引号,更脆弱,更难阅读

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

此外,您不能混合使用单引号和双引号。根据您需要的功能选择一个或另一个。

我想在特定列中搜索特定字符串。。。怎么做?我这样做是为了搜索作为第一个参数传递的文件名,“awk-F'\t''”$2==“$search_file'./index.txt>final.txt”,但似乎什么也没发生。你能帮我吗?