Ошибки печатаются на stderr
, но результаты печатаются на stdout
. Вы можете перенаправить ошибки так, чтобы их не было видно:
find / -type d -name 'force_fields' 2>/dev/null
-121--198319- Эти сообщения записываются через стандартный канал ошибок (номер 2). Вы можете перенаправить сообщение об ошибке на /dev/null
, чтобы избежать их:
find / -type d -name 'force_fields' 2>/dev/null
-121--198320- Да, темно-синий на черном не читается.
Найдите строку в сценарии ~/.bashrc или ~/.zshrc или другом сценарии профиля, который выглядит следующим образом:
eval $(dircolors)
и измените ее на
eval $(dircolors -p | sed -e 's/DIR 01;34/DIR 01;36/' | dircolors /dev/stdin)
синий («01; 34») на голубой («01; 36»)
Либо отредактируйте цветовую схему программы терминала и измените темно-синий цвет на более читаемый.
Попробуйте:
awk 'FNR==NR{seen[$1]=$2; next} seen[$NF]{print $0, seen[$NF]}' file2 file1
С помощью ключа столбца $1 сохраните соответствующее значение столбца $2 в связанный массив с именем , видимый , когда awk читает только из файла2 , гдеNR==FNR
(всегда верно для первого входного файла, когда есть несколько входных файлов для чтения ), NR
будет установлено в 1 для первой записи/строки, прочитанной awk и увеличивается до тех пор, пока не будут прочитаны все записи/строки, если они одиночные входной файл или несколько файлов; FNR
установит значение 1 для первой записи/строки, считанной с помощью awk , и будет увеличиваться до тех пор, пока все записи/строки не будут прочитаны в текущем входном файле, и не будет сброшено обратно на 1 для следующего файла.
Следующий блок, если значение последнего столбца совпадает с тем же значением ключа в видимом массиве, затем напечатать всю строку из файла1 и значение того же ключа в массиве.
Предположим, что поле, в котором вы хотите объединить/объединить данные, отсортировано:
$ join -1 4 -o1.1,1.2,1.3,0,2.2 file1 file2
1 115258827 12 HG00099 0|0
1 115258827 5 HG00100 0|1
1 115258827 8 HG00101 0|0
1 115258827 6 HG00103 0|0
Это объединяет два файла в четвертом столбце file1
(, указанном с помощью -1 4
, так как это не первый столбец в этом файле )и первый столбецfile2
(это столбцы, которые нужны файлам для сортировки по ).
Флаг -o
указывает join
какие поля мы хотели бы видеть в выводе и из какого файла их брать(1.3
означает "третье поле из первого файла", например, а 0
означает поле соединения ).
Преимущество использования join
заключается в том, что ни один файл не нужно полностью считывать в память.
Если файлы не отсортированы, вы можете либо предварительно -отсортировать их раз и навсегда с помощью
sort -k4 -o file1 file1
sort -o file2 file2
или, если вы используете оболочку, которая понимает подстановку процессов, вы можете сортировать их одновременно с соединением, используя
join -1 4 -o1.1,1.2,1.3,0,2.2 <( sort -k4 file1 ) <( sort file2 )
Именно отсортированные данные позволяют join
одновременно хранить в памяти только несколько строк каждого файла.