Переупорядочить файлы, начиная с нужного файла, с помощью awk one-liner - PullRequest
0 голосов
/ 12 апреля 2020

Предположим, у нас есть эти обычные отсортированные файлы в папке unix / linux.

A.txt
B.txt
C.txt
D.txt
a.txt
b.txt
c.txt

command D.txt должно быть отсортировано как:

D.txt -> begin with selected file
a.txt
b.txt
c.txt
A.txt -> append remaining files in order
B.txt
C.txt

command b.txt должно быть отсортировано as:

b.txt
c.txt
A.txt
B.txt
C.txt
D.txt
a.txt

Я попробовал такие сценарии ниже, но, похоже, awk не переупорядочивает вывод так, как мне хотелось. Команда всегда сортирует обычный порядок.

#!/bin/sh
export fname="$1"
find . -maxdepth 1 -type f | sort | awk -v ref="./$fname" '($0 > ref) {print $0} ($0 < ref) {print $0}'

1 Ответ

0 голосов
/ 12 апреля 2020

Буферные строки до ref, печать ref и последовательных строк по мере их поступления и печать буфера в конце.

awk -v ref="./$fname" '$0==ref{f=1} f{print;next} {buf=buf $0 ORS} END{printf "%s",buf}'

Демонстрация:

$ seq 5 | awk -v ref=3 '$0==ref{f=1} f{print;next} {buf=buf $0 ORS} END{printf "%s",buf}'
3
4
5
1
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...