Пакетная сортировка нескольких файлов и удаление повторяющихся строк из нескольких файлов - по возможности на месте

NR == 1 {
    for (i = 1; i <= NF; i++) {
        header[i] = $i
        printf "%s\t", $i
    }
    print ""
}

NR > 1 {
    for (i = 1; i <= NF; i++) {
        printf "%s=%s\t", header[i], $i
    }
    print ""
}

1. Создайте файл с именем awkprog и вставьте в него указанное выше содержимое.
2. Предполагая, что имя вашего файла data.txt.
3. Затем запустите awk -f awkprog data.txt

1
15.01.2017, 00:56
1 ответ

I ' m не уверен, что требуется для одной команды, но это довольно близко:

(cd /directory/; find -type f -printf '%P\0' | while IFS= read -r -d '' fn; do
    awk '{ print length, $0 }' "$fn" | sort -nur | sed -r 's/^[0-9]+ //' > "$fn.~"
    mv "$fn.~" "$fn"
done)

Первая строка просто считывает имена файлов настолько надежно, насколько это возможно.

Во второй строке происходит вся работа:

  • awk добавляет количество символов (+ пробел) в начало каждой строки
  • sort -n (числовой), -u (уникальный) и -r (обратный) обработать файл
  • sed удаляет счетчик ведущих символов
  • , затем он выгружается во временный файл

. Строка mv затем записывает временный файл поверх оригинала (так как это невозможно сделать во время трубопровод).

0
28.01.2020, 01:04

Теги

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