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)}$" filenameRun 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)