Сортировать файл со словом

С zsh:

mkdir -p -- *.doc(:r)

Или:

for f (*.doc) {
  mkdir -p -- $f:r &&
    mv -- $f $f:r/
}

Эквивалент bash (хотя он также будет работать во всех оболочках POSIX и zsh):

for f in *.doc; do
  mkdir -p -- "${f%.*}" &&
    mv -- "$f" "${f%.*}/"
done

(обратите внимание, что он исключает скрытые файлы).

1
12.03.2019, 17:43
2 ответа

На этот вопрос ответил пользователь "emilrn", который по какой-то причине был удалён. Тем не менее, их ответ работал отлично.

Мне сказали запустить обе эти команды:

cat LoginExcInternal.txt | grep OpenFin >> test.txt
cat LoginExcInternal.txt | grep Chrome >> test.txt

Спасибо, Эмильрн!

0
27.01.2020, 23:22

Ваша команда

grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt

будет создавать только те строки из исходных данных, которые содержат строку Chromeв любом месте строки. Это связано с тем, что результат первого grepв конвейере вообще не будет обрабатываться правой стороной конвейера (, он будет просто отброшен ).

grepпри указании имени файла для чтения не будет обрабатывать стандартный входной поток. Именно в стандартный поток ввода поступает результат первого grep.


sort -k2r LoginExcInternal.txt >test.txt

Вы хотите, чтобы строки с Chromeво втором столбце шли после строк, содержащих OpenFinв том же столбце. Вышеупомянутое делает это посредством сортировки исходных данных во втором столбце в обратном лексикографическом порядке.

Флаг -k2rдля sortуказывает утилите сортировать данные во втором столбце (и далее, если столбцов больше двух ), в обратном порядке (иr). Если две строки имеют одинаковое значение во втором столбце, то в качестве ключа сортировки будет использоваться вся строка.

Строки с любыми другими значениями во втором столбце будут отсортированы с остальными строками и также будут частью вывода.


Если вы заботитесь об исходном порядке данных и не хотите его менять, а также предполагаете, что вы хотите извлечь только строки с этими двумя значениями во втором столбце (и без других значений )затем сделайте это в два этапа:

awk -v value='OpenFin' '$2 == value' LoginExcInternal.txt >test.txt
awk -v value='Chrome'  '$2 == value' LoginExcInternal.txt >>test.txt

Это дважды применяет один и тот же код awkк исходным данным с разными значениями переменной value. Код выполняет сравнение строк во втором столбце (только )и печатает строки, имеющие указанное значение. Первый запуск скрипта awkвыполняет значения OpenFin, а второй добавляет к этому строки Chrome.

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

1
27.01.2020, 23:22

Теги

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