Bash脚本用于获取文件输入和打印具有特定条件的内容

时间:2014-01-17 16:48:09

标签: linux bash shell unix

右。基本上我想要实现的是一个bash脚本,它将文件名作为第一个参数,并显示输入文件中的行:

  1. 不是目录
  2. 可执行 这些行应按升序文件大小排序。
  3. 我正在使用的输入文件示例包含以下内容:

    -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”的行的命令是什么,以及如何按示例输入文件中给出的大小对行进行排序。 / p>

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

    例如:“jonathan”将打印以下内容:

    -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
    

2 个答案:

答案 0 :(得分: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
  • 您过滤掉以d
  • 开头的内容
  • 检查第一个字段包含x
  • 的内容
  • 您根据5字段进行排序,数字

以下是您可以在shell脚本中删除的版本:

file=$1
user=$2

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

答案 1 :(得分:0)

使用shell。

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