Shell

如何找到字元最少的行

  • April 25, 2019

我正在編寫一個 shell 腳本,使用任何通用的 UNIX 命令。我必須檢索字元最少的行(包括空格)。最多可以有 20 行左右。

我知道我可以head -$L | tail -1 | wc -m用來查找第 L 行的字元數。問題是,我能想到的唯一方法是手動編寫一堆 if 語句,比較值。

範例數據:

seven/7
4for
8 eight?
five!

將返回4for,因為該行的字元最少。

就我而言,如果多行的長度最短,則應返回單行。選擇哪一個並不重要,只要它具有最小長度即可。但我認為向其他情況下的其他使用者展示兩種方式並沒有什麼害處。

awk這是列印第一個找到的最小線的解決方案的變體:

awk '
 NR==1 || length<len {len=length; line=$0}
 END {print line}
'

可以簡單地通過一個條件擴展以列印所有最小行:

awk '
 length==len {line=line ORS $0}
 NR==1 || length<len {len=length; line=$0}
 END {print line}'
'

sqlite3

sqlite3 <<EOT
CREATE TABLE file(line);
.import "data.txt" file
SELECT line FROM file ORDER BY length(line) LIMIT 1;
EOT

引用自:https://unix.stackexchange.com/questions/207217