use*_*868 5 linux bash scripting awk
我正在做家务工作.问题是:
编写一个
awk脚本来选择/etc结尾的所有常规文件(不是目录或链接),.conf按大小从最小到最大排序结果,计算文件数,然后在两列中打印文件数,后跟文件名和大小.包含文件名和大小的标题行.将脚本及其输出粘贴到答案区域.
我真的在努力通过使用awk来努力工作.这就是我想出来的.
ls -lrS /etc/*.conf |wc –l
Run Code Online (Sandbox Code Playgroud)
将返回数字33,即.conf目录中文件文件的数量.
ls -lrS /etc/*.conf |awk '{print "File_Size"": " $5 " ""File_Name and Size"": " $9}'
Run Code Online (Sandbox Code Playgroud)
这将使2列具有.conf目录中文件的名称和大小.
它有效,但我不认为这是他正在寻找的.我有一个愉快的时间.
我们在这看......
选择所有常规文件(不是目录或链接)
到目前为止,你还没有解决这个问题,但如果你在输出中输入ls -l...,这很容易,请选择
/^-/
Run Code Online (Sandbox Code Playgroud)
因为目录以d,符号链接等开头l.只有普通的旧文件才能开头-.现在
打印出随后的文件数量
好吧,计算比赛很容易......
BEGIN{count=0} # This is not *necessary*, but I tend to put it in for clarity
/^-/ {count++;}
Run Code Online (Sandbox Code Playgroud)
要获取文件名和大小,请查看ls -l列的输出和计数列
BEGIN{count=0}
/^-/ {
count++;
SIZE=$5;
FNAME=$9;
}
Run Code Online (Sandbox Code Playgroud)
这里最大的困难是awk通过排序原语没有提供太多,所以这是困难的部分.如果你想要聪明但不是特别有效,那就可以打败(看看我在[code-golf]解决方案中所做的糟糕的事情).在易(和unixy)的事情是将输出的管道部分sort,所以......我们收集每个文件中的行成一个大的字符串
BEGIN{count=0}
/^-/ {
count++
SIZE=$5;
FNAME=$9;
OUTPUT=sprintf("%10d\t%s\n%s",SIZE,FNAME,OUTPUT);
}
END{
printf("%d files\n",count);
printf(" SIZE \tFILENAME"); # No newline here because OUTPUT has it
print OUTPUT|"sort -n --key=1";
}
Run Code Online (Sandbox Code Playgroud)
给出类似的输出
11 files
SIZE FILENAME
673 makefile
2192 houghdata.cc
2749 houghdata.hh
6236 testhough.cc
8751 fasthough.hh
11886 fasthough.cc
19270 HoughData.png
60036 houghdata.o
104680 testhough
150292 testhough.o
168588 fasthough.o
Run Code Online (Sandbox Code Playgroud)
(顺便说一句 - 这里有一个test子目录,你会注意到它没有出现在输出中.)
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |