Что составляет 'поле' для команды сокращения?

Я попробовал бы две вещи.

Я заметил по некоторым причинам (и верно ли это или нет, я не уверен), что Linux более чувствителен к сбою аппаратных средств. Я видел это на своем компьютере домашнего офиса пару раз.

У меня никогда не было большой удачи с SeaTools. Я всегда использовал Регенератор жесткого диска для проверения дважды для поврежденных секторов, даже на новых дисках. Это не свободно, но это работает действительно хорошо.

Следующей вещью, которую я попробовал бы (или первое, начиная с его свободного) будет Memtest.

Для этого я рекомендовал бы Окончательной Начальной загрузке CD. Я позволил бы ему выполнить минимум часа - в течение ночи предпочтительно.

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

16
25.04.2016, 04:17
6 ответов
[116387] Термин "поле" часто ассоциируется с такими инструментами, как [116744]cut[116745] и [116746]awk[116747]. Поле будет похоже на столбцы данных, если вы возьмете данные и разделите их, используя определенный символ. Обычно для этого используется символ [116748]пробел[116749].

Однако, как и в случае с большинством инструментов, его можно настроить. Например:

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].
19
27.01.2020, 19:48
[116371] Это зависит от рассматриваемой утилиты, но для [116712]cut[116713], "поле" начинается с начала строки текста и включает в себя все, вплоть до первой вкладки. Второе поле начинается с символа после первой вкладки и заканчивается следующей вкладкой. И так далее для третьей, четвертой, ... Все между табуляциями, или между стартом строки и табуляцией, или между табуляцией и концом строки.

Если только вы не укажете разделитель полей с опцией "-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].

2
27.01.2020, 19:48
[116381] Термин "поле" относится не к linux в целом, а к конкретным программам. Так что [116734]cut[116735] использует иной тип поля, чем [116736]sort[116737].

С помощью [116738]cut[116739] вы сами определяете, что такое поле, указывая разделитель полей с опцией -d, которая разделяет поля в каждой строке.

Если ваши данные разделены двоеточиями в строках, вы можете объединить [116740]-d[116741] и [116742]-f[116743], чтобы получить такие поля (или столбцы) 2, 3 и 6, как:

2
27.01.2020, 19:48

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 легко ошибиться.

0
27.01.2020, 19:48

Когда вы используете команду 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
1
27.01.2020, 19:48

Теги

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