繁体   English   中英

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

[英]Bash script to take file input and print content with a certain condition

对。 基本上我想要实现的是一个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”的行的命令是什么,以及如何按示例输入文件中给出的大小对行进行排序。

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

例如:“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

这是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

使用shell。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM