Как получить второй столбец из вывода команды?

Нет. Если есть проблема с подключением к одному из дисков, есть вероятность, что во время копирования может произойти повреждение, но сама команда cp не вызовет повреждения. Вы упомянули разрешения и временные метки; они хранятся не в самом файле, а в метаданных. Команда cp может (и часто это делает) изменять метаданные.

2
03.08.2016, 16:52
6 ответов

Если указанные выше 7 строк остаются постоянными после выполнения команды каждый раз, используйте:

yourcommand | sed 1,7d | awk '{print $2}'

sed 1,7d просто скроет первые 7 строк, которые вам не нужны. awk отсортирует именно то содержимое, которое вы действительно ищете ...

cat yourcommand_out | sed 1,7d | awk '{print $2}'
20.00
20.00
23.75
23.75
27.52
27.52
31.30
31.30
35.08
35.08
38.87
38.87
42.67
42.67
46.48
46.48
50.29
50.29
54.12
54.12
57.95
57.95
61.79
61.79
65.64
65.64
69.50
69.50
73.37
73.37
77.25
77.25
81.14
-1
27.01.2020, 23:10

Мы можем проверить, начинается ли первое поле с числа, и просто напечатать второе

awk '$1 ~ /^[0-9][0-9]*$/ { print $2}' electric_thermal.dat > nset_output.dat

Это соответствует вашему исходному файлу и возвращает

20.00
20.00
23.75
23.75
27.52
27.52
31.30
31.30
....
0
27.01.2020, 23:10

Попробуйте следующее:

awk '/^[ ]*[[:digit:]]/ {print $2}' inputFile
-2
27.01.2020, 23:10

awk - ваш друг:

awk '$1 ~ /^[[:digit:]]+$/{print $2}' electric_thermal.dat >outfile

должен это сделать

{ {1}}
0
27.01.2020, 23:10

Предполагая, что достаточно проверить цифру в первом столбце:

awk '$1 ~ /[0-9]/ { print $2 }' data.in >data.out

Чтобы убедиться, что это применяется только к строкам после строки NSET_OUTPUT , вы можете сделать что-то вроде следующего:

sed '1,/NSET_OUTPUT/d' data.in | awk '$1 ~ /[0-9]/ { print $2 }' >data.out

Это приведет к удалению строк перед NSET_OUTPUT и отправке остальных в сценарий awk .


Ваш скрипт будет выводить только одно число, поскольку он, для каждой строки ввода , будет искать NSET_OUTPUT , и, если он найден, пропускает пять строк перед извлечением числа из второго столбец.

Ниже приведена фиксированная версия вашего скрипта:

BEGIN { print_values = 0 }

$12 ~ /NSET_OUTPUT/ {
    for (i = 1; i <= 5; i++) {
        getline;
    }

    print_values = 1;
}

print_values == 1 {
    x = $2;
    print x >"nset_output.dat"
}
2
27.01.2020, 23:10

Comando

 awk '$1 ~ /^[0-9]*$/{print $2}' file name


output
20.00
20.00
23.75
23.75
27.52
27.52
31.30
31.30
35.08
35.08
38.87
38.87
42.67
42.67
46.48
46.48
50.29
50.29
54.12
54.12
57.95
57.95
61.79
61.79
65.64
65.64
69.50
69.50
73.37
73.37
77.25
77.25
81.14
0
27.01.2020, 23:10

Теги

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