gpt4 book ai didi

linux - 用于选择文件和打印文件大小的 awk 脚本

转载 作者:IT王子 更新时间:2023-10-29 01:20:04 26 4
gpt4 key购买 nike

我正在做家庭作业。问题是:

Write an awk script to select all regular files (not directories or links) in /etc ending with .conf, sort the result by size from smallest to largest, count the number of files, and print out the number of files followed by the filenames and sizes in two columns. Include a header row for the filenames and sizes. Paste both your script and its output in the answer area.

我真的很难通过使用 awk 来实现它。这是我想出的。

 ls -lrS /etc/*.conf |wc –l 

将返回数字 33,这是目录中 .conf 文件的数量。

 ls -lrS /etc/*.conf |awk '{print "File_Size"": " $5 "   ""File_Name and Size"": " $9}'

这将生成 2 列,其中包含目录中 .conf 文件的名称和大小。

它有效,但我认为这不是他想要的。我玩得很开心。

最佳答案

让我们看看这里...

select all regular files (not directories or links)

到目前为止你还没有解决这个问题,但是如果你在 ls -l... 的输出中输入管道,这很容易,选择 on

/^-/

因为目录以 d 开头,符号链接(symbolic link)以 l 等等。只有普通的旧文件以 - 开头。现在

print out the number of files followed

好吧,计算匹配项很容易......

BEGIN{count=0}  # This is not *necessary*, but I tend to put it in for clarity
/^-/ {count++;}

要获取文件名和大小,请查看 ls -l 的输出并计算列数

BEGIN{count=0}
/^-/ {
count++;
SIZE=$5;
FNAME=$9;
}

这里最大的困难是 awk 没有提供多少排序原语的方法,所以这是困难的部分。如果您想变得聪明,那可以被打败,但它不是特别有效(请参阅我在 a [code-golf] solution 中所做的糟糕事情)。 easy(和 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";
}

给出类似的输出

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

(顺便说一句——这里有一个 test 子目录,您会注意到它没有出现在输出中。)

关于linux - 用于选择文件和打印文件大小的 awk 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8554413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com