Сортировка слов на каждой строке, редактирование файла на месте

с помощью инструмента Json под названием json ( https://github.com/trentm/json )

$ json -ga 'stationNameAssoc.[0].stationId' < input
6248915749115539177
7597999415247634177

или используйте его step по шагам:

cat input | json -ga 'stationNameAssoc' | json -ga stationId

документация в: http://trentm.com/json/


, если не установлена:

install node
and sudo npm install -g json

1
12.04.2017, 22:45
2 ответа

Вы можете использовать sponge , как упоминалось в Программа, которая может буферизовать стандартный ввод или файл . Вы можете передать ему весь цикл, точно так же, как ввод перенаправляется на него:

while read -r line ; do 
    echo "$line" | sed -r 's/\</\n/g' | sort | tr '\n' ' ' ; 
    echo
done < filename | sponge filename

В Perl то же самое можно сделать с этим (количество пробелов другое):

perl -Mlocale -i -lne 'print join " ", sort split/(?<=\.)| /' filename
2
27.01.2020, 23:19

awk подход:

awk 'BEGIN{IGNORECASE=1;}{ gsub(/\./,". ", $0); split($0, w, " "); 
     asort(w);l=""; for(i in w) {l=l" "w[i]} print l}' file

Вывод:

1. 2. 3. e4 e5 Nc6 Nf3
1. 2. 3. d4 d5 dxe4 e4
1. 2. 3. e4 e5 Nf3 Nf6

IGNORECASE может быть установлен в командной строке или в правиле BEGIN

split ($ 0, w, ""); - разбивает строку на отдельные слова

asort (w); - сортирует значения массива (слова)

для (i in w) {l = l "" w [i]} - объединение отсортированных слов в одну строку

2
27.01.2020, 23:19

Теги

Похожие вопросы