Я попробовал бы две вещи.
Я заметил по некоторым причинам (и верно ли это или нет, я не уверен), что Linux более чувствителен к сбою аппаратных средств. Я видел это на своем компьютере домашнего офиса пару раз.
У меня никогда не было большой удачи с SeaTools. Я всегда использовал Регенератор жесткого диска для проверения дважды для поврежденных секторов, даже на новых дисках. Это не свободно, но это работает действительно хорошо.
Следующей вещью, которую я попробовал бы (или первое, начиная с его свободного) будет Memtest.
Для этого я рекомендовал бы Окончательной Начальной загрузке CD. Я позволил бы ему выполнить минимум часа - в течение ночи предпочтительно.
Из тех двух я поставил бы много денег, которые что-то разоблачит дефектный - и мои деньги были бы на памяти.
Однако, как и в случае с большинством инструментов, его можно настроить. Например:
awk = [116877]awk -F"," ...[116878] - разделится запятыми (т.е. [116879],[116880]).osascript -e 'tell application "System Events"' \
-e 'keystroke "s" using {command down, option down}' \
-e 'end tell'
cut = [116881]cut -d"," ... [116882] - разделится запятыми (т.е. [116883], [116884]).
Примеры
Этот первый показывает, как [116754]awk[116755] автоматически разделится на пробелы.
Этот пример показывает, как [116756]cut[116757] разбивается на пробелы.
Здесь у нас есть CSV-список данных столбцов, которые мы используем [116758]cut[116759] для возврата столбцов 1 и 4.
Awk тоже может это сделать:
Awk также немного более искусен в работе с различными символами разбиения. Здесь он имеет дело с [116760]Tabs[116761] вместе с [116762]Spaces[116763], где они перемешиваются в одно и то же время:
А как насчет переключателя -s, чтобы вырезать?
# build list of files; note, won't work when filename contains a space or colon
files=""
for i in `seq 30 99`; do
files="$files my_log-bin.$i"
done
scp $files root@192.168.103.66:/backup/
Что касается этого переключателя, то он просто говорит [116764]cut[116765] не печатать строки, которые не содержат разделительного символа, заданного с помощью переключателя [116766]-d[116767].Пример
$ for i in `seq 1 100` ; do touch $i ; done
$ ls
1 13 18 22 27 31 36 40 45 5 54 59 63 68 72 77 81 86 90 95
10 14 19 23 28 32 37 41 46 50 55 6 64 69 73 78 82 87 91 96
100 15 2 24 29 33 38 42 47 51 56 60 65 7 74 79 83 88 92 97
11 16 20 25 3 34 39 43 48 52 57 61 66 70 75 8 84 89 93 98
12 17 21 26 30 35 4 44 49 53 58 62 67 71 76 80 85 9 94 99
$ echo [0-9]
1 2 3 4 5 6 7 8 9
$ echo [30-99]
1 2 3 4 5 6 7 8 9
Скажем, у нас был этот файл.
$ touch a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo [f-l]
f g h i j k l
ЗАМЕЧАНИЕ:[116769] Во 2-ой строке выше есть пробелы и табуляции.
[...] Matches any one of the enclosed characters. A pair of
characters separated by a hyphen denotes a range
expression; any character that sorts between those two
characters, inclusive, using the current locale's
collating sequence and character set, is matched. If
the first character following the [ is a ! or a ^
then any character not enclosed is matched. The
sorting order of characters in range expressions is
determined by the current locale and the value of the
LC_COLLATE shell variable, if set. A - may be matched
by including it as the first or last character in the
set. A ] may be matched by including it as the first
character in the set.
Within [ and ], character classes can be specified
using the syntax [:class:], where class is one of the
following classes defined in the POSIX standard:
alnum alpha ascii blank cntrl digit graph lower print
punct space upper word xdigit
A character class matches any character belonging to
that class. The word character class matches letters,
digits, and the character _.
Within [ and ], an equivalence class can be specified
using the syntax [=c=], which matches all characters
with the same collation weight (as defined by the
current locale) as the character c.
Within [ and ], the syntax [.symbol.] matches the
collating symbol symbol.
Теперь, когда мы обрабатываем эти строки, используя [116770]cut[116771] с переключателем [116772]-s[116773] и без него:
scp my_log-bin.0139{30..99} root@192.168.103.66:/backup/
Во 2-ом примере видно, что переключатель [116774]-s[116775] опустил из вывода какие-либо строки, не содержащие разделителя, [116776]-пробел[116777].[116418]. IFS
, "
разделитель входных полей [117779] (или [117780]внутренний разделитель полей [117781])".[117356]" Значением по умолчанию является пробел, за которым следует горизонтальный табулятор, за которым следует новая строка. С помощью Bash можно запустить [117357]printf '%q\n' "$IFS"[117358], чтобы увидеть его значение.[116996].
Если только вы не укажете разделитель полей с опцией "-d": [116714]cut -d: -f2[116715] получит все между первым и вторым двоеточием (':') символов.
Другие утилиты имеют разные определения, но символ табуляции является общим. [116716]awk[116717] является хорошим откатом, если [116718]cut[116719] слишком строгий, так как [116720]awk[116721] разделяет поля на основе одного или нескольких символов пробела. Это немного более естественно во многих ситуациях, но вы должны знать немного синтаксиса. Чтобы распечатать второе поле в соответствии с [116722]awk[116723]:
sort[116725] - это то, что меня обманывает. Моя текущая [116726]сортировка [116727] man page говорит о чем-то вроде "не пустой к пустому переходу" для полевого сепаратора. По какой-то причине требуется несколько попыток, чтобы получить правильно определенные поля [116728] сортировки [116729]. [116730]join[116731] видимо использует "разделенные пробелом" поля, что и пытается сделать по умолчанию [116732]awk[116733].
Мораль этой истории - быть осторожным и экспериментировать, если вы не знаете.[116380].
Если ваши данные разделены двоеточиями в строках, вы можете объединить [116740]-d[116741] и [116742]-f[116743], чтобы получить такие поля (или столбцы) 2, 3 и 6, как:
cut
отлично подходит для простых случаев, когда разделитель представляет собой один символ, и вы хотите вывести подмножество полей ввода в том же порядке (даже если я укажу -f3,2,1
, действует так же, как -f1,2,3
).
awk
однострочники гораздо более гибкие, например когда разделителем поля ввода может быть любой пробел ( awk
по умолчанию), или когда вы хотите выводить поля в другом порядке или в определенном формате.
Например, wc -l myfile | awk '{print $ 1}'
или ls -l file1 file2 | awk '{printf "% s,% s:% s \ n", $ 9, $ 7, $ 3}'
очень просты, но их трудно сделать с cut
.
Я согласен с предыдущими сообщениями о том, что поля / ключи в sort
сложно определить!
Поля в join
, похоже, работают так же, как в cut
, хотя в параметрах join
легко ошибиться.
Когда вы используете команду cut
, она принимает два основных аргумента
-d : which stand for delimiter
-f : which stand for field to be cut from the input file
Ex. cut - d "|" - f1, 2 input_filename
Здесь output
будет разделен разделителем "|" и он вырежет только 2 поля из входного файла
Если в вашем файле есть следующие строки
Alex|120000|Admin|1999
Затем будет вырезано 2 поля,
Alex|120000