2014-01-17 38 views
0

对。基本上我想要实现的是一个bash脚本,它接受一个文件作为第一个参数的名称,并显示输入文件是行:Bash脚本采取文件输入和打印内容的一定条件

  1. 不是目录
  2. 可执行 而且这些线路应进行排序按升序文件大小顺序。

输入文件的例子,我使用的是具有以下内容:

-rw-r--r-- 1 root  software  36 Dec 3 14:27 config 
-rwxr-xr-x 1 root  software  72 Dec 3 14:27 config2 
-rw-rw-r-- 1 jonathan software 7410294 Dec 3 14:28 even larger file 
-rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2 
-rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file 
-rwxr-xr-x 1 andrew software 823366 Feb 11 16:25 myprogram 
-rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script 
drwxrwsr-x 2 andrew software  4096 Dec 3 19:24 testdir1 
drwxrwsr-x 2 bob  software  4096 Dec 3 10:21 testdir2 
drwxrwsr-x 2 david software  4096 Aug 23 14:24 testdir3 
drwxrwsr-x 2 david software  4096 Dec 3 13:32 testdir4 
drwxrwsr-x 2 james software  4096 Jan 5 14:24 testdir5 
-rw-rw-r-- 1 james software  85 Dec 3 14:24 testfile1 

我写剧本要求的文件名和打印文件的内容:

#!/bin/bash 
echo "Please enter your filename:" 
read filename 
while read line; 
do echo -e "$line\n"; 
done < $filename 

但我不知道什么命令来逐行查找内容并搜索不包含“drw”的行以及如何按示例输入文件中给出的大小对行进行排序。

编辑:这是我的问题的第二部分。 现在我想修改脚本以获取第二个参数,如果提供的参数被假定为用户名。只有与用户名匹配的行才会被打印。

如: “乔纳森” 将打印以下:

-rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script 
-rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file 
-rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2 
+0

你如何得到这样的输入数据?来自ls的输出? – anubhava

回答

2

下面是使用awk的解决方案:

$ awk '!/^d/ && $1 ~ /x/' text.txt | sort -k5,5n 
-rwxr-xr-x 1 root  software  72 Dec 3 14:27 config2 
-rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script 
-rwxr-xr-x 1 andrew software 823366 Feb 11 16:25 myprogram 
-rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file 
-rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2 
  • 您筛选出的事情,与广告开始
  • 你检查对于其第一个字段包含一个x的东西
  • 您基于5字段进行排序,数字为

这里是一个版本,你可以在shell脚本下降:

file=$1 
user=$2 

awk '!/^d/ && $1 ~ /x/ && $3 ~/'"${user}/" "$file" | sort -k5,5n 
+0

对awk工具队友不太熟悉。我如何在我的bash脚本中实现awk命令? –

+1

@BhanuChawla你可能会逃避只是调用,但用'$ 1'而不是'text.txt'。 – cnicutar

+0

太棒了@cnicutar。这是一种魅力! :) –

0

使用shell。

ls -l |grep -v "^d" |grep "^-rwx"|sort -k5n