use*_*965 13 command-line bash scripts
我有兴趣从文件中找出最长行的行号。
例如,如果我有一个包含以下内容的文件:
lalala
tatatata
abracadabra
mu mu mu
Run Code Online (Sandbox Code Playgroud)
我怎样才能编写一个 bash 脚本,它会给我这样的输出:3 -> abracadabra
?
Rad*_*anu 11
您不需要脚本来执行此操作。一个简单的命令就足够了:
egrep -n "^.{$(wc -L < filename)}$" filename
Run Code Online (Sandbox Code Playgroud)
即使您有两条或多条具有相同最大长度的行,这也将起作用。
如果您希望输出完全采用这种形式: 3 -> abracadabra
,请使用:
egrep -n "^.{$(wc -L < filename)}$" filename | sed 's/:/ -> /'
Run Code Online (Sandbox Code Playgroud)
参考:
Att*_* O. 10
您可以使用awk
打印每行的长度 ( length()
) 和行号 ( NR
),然后按数字 ( )反转 ( -r
)sort
结果-n
:
$ awk '{ print length(), NR, $0 | "sort -rn" }' tmp.txt
10 3 abracadabr
8 4 mu mu mu
7 2 tatatat
6 1 lalala
Run Code Online (Sandbox Code Playgroud)
只显示第一行:
$ awk '{ print length(), NR, $0 | "sort -rn" }' tmp.txt | head -n 1
10 3 abracadabr
Run Code Online (Sandbox Code Playgroud)