我有一个文件,file.txt
其中包含以下内容:
This is many letters
This is few
Hi
This is a very long sentence.
(它实际上有几千行长,但我是 Linux 新手,想让它变得简单一些。)
我只想在 shell 中按每行的长度对列表进行排序,无论哪个方向。最小的排在最前面或最后。
然后我希望它打印最短的一行“hi”,并可能告诉我它在哪一行以及字符数。我该怎么做,最好不使用 Awk?
答案1
命令
line_num=0
while IFS= read -r line
do
echo "${#line} $((++line_num)) $line"
done < file.txt > tmpfile.txt
将创建一个名为的文件tmpfile.txt
,其内容如下:
20 1 This is many letters
11 2 This is few
2 3 Hi
29 4 This is a very long sentence.
其中每行前面都有其长度和行号。然后sort -n tmpfile.txt
会产生:
2 3 Hi
11 2 This is few
20 1 This is many letters
29 4 This is a very long sentence.
按行长排序。然后您可以将其发送到head -n1
以获取第一行(即最短的行)或tail -n1
获取最后一行(即最长的行)。或者使用sort -nr
来反转顺序,这样您就可以使用head -n1
来获取最长的行。(这可能比使用 更有效tail
。)
如果您只想查看最短的行,则可以使用管道并避免创建临时文件:
line_num=0
while IFS= read -r line
do
echo "${#line} $((++line_num)) $line"
done < file.txt | sort -n | head -n1
这可能更有效率awk
。