[英]Bash sorting list by keyword
我正在嘗試編寫一個 bash 腳本,該腳本接受輸入 stream 並將包含關鍵字的行排序到頂部。
初始點:
$ cat file
cat
dog
mouse
bird
cat and mouse
lorem
ipsum
目標:
$ cat file | sort-by-keyword mouse
mouse
cat and mouse
cat
dog
bird
lorem
ipsum
我嘗試使用 sort 來實現這一點,但失敗了。 是我不知道的另一種工具/方式嗎?
您不能對記錄的 rest 進行排序。 基於輸入。 請試試
awk '{if ($0 ~ /mouse/) {print} else {a[NR]=$0}} END {for (i in a) print a[i]}'
演示:
$cat file.txt
cat
dog
mouse
bird
cat and mouse
lorem
ipsum
$awk '{if ($0 ~ /mouse/) {print} else {a[NR]=$0}} END {for (i in a) print a[i]}' file.txt
mouse
cat and mouse
bird
lorem
ipsum
cat
dog
$
實現它的一種骯臟方法:
grep mouse file && grep -v mouse file
使用sed
:
腳本文件sort-by-keyword
:
#!/bin/bash
input="$(cat)"
echo "$input" | sed "/$1/p;d"
echo "$input" | sed "/$1/!p;d"
用法:
chmod +x sort-by-keyword
cat file | ./sort-by-keyword mouse
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.