Текст в таблицу с поиском v

В Unix файл — это просто последовательность байтов, однако некоторые файлы имеют более сложную структуру. Команда fileможет просмотреть последовательность байтов и сообщить вам некоторые вещи. Например, если первые 4 байта равны \177 E L F, то она скажет вам, что это файл elf. Затем он просмотрит дополнительные байты и сообщит вам, является ли это основным файлом, исполняемым или объектным файлом. Если байты с 6 по 9 - JFIF, то это файл изображения, и снова программа может прочитать больше и рассказать вам об этом.

Многое из этого управляется таблицами данных, а не компилируется в программу. Эти таблицы данных находятся в файлах magic.

Таким образом, причина, по которой у вас есть волшебные файлы, заключается в том, чтобы позволить вам сказать file *и заставить программу сказать вам, что у вас есть в текущем каталоге.

-2
06.01.2020, 16:32
2 ответа

Попробуйте:

awk '
!($3 in T1)     {SQ[++CNT] = $3
                }
                {T1[$3] = T1[$3] DL[$3] $1
                 T2[$3] = T2[$3] DL[$3] $2
                 DL[$3] = ","
                }
END             {for (i=1; i<=CNT; i++) printf "%s\t%s\t%s\t", T1[SQ[i]], T2[SQ[i]], SQ[i]
                print _
                }
' file
1,3 2,4 5s  5   6   16s 7   8   23s 
0
28.04.2021, 23:26

Альтернативная кувалда с GNU awk, использующая новую строку или пробел в качестве разделителя полей -F'[\n ]', которая также требует RS="", чтобы избежать использования любого \nв качестве разделителя записей.

awk -F'[\n ]' 'BEGIN{RS=""; OFS="\t"}
    {print  substr(FILENAME,1,length(FILENAME)-4), $1","$4, $2","$5, $3, $7, $8, $9, $10, $11, $12}
    ' *.txt

Выход:

 File1   1,3     2,4     5s      5       6       16s     7       8       23s
0
28.04.2021, 23:26

Теги

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