簡體   English   中英

Bash 按關鍵字排序列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM