Удалить значения из разных мест в текстовом файле

minicomотсутствует в списке инструментов для мониторинга последовательных портов. Используйте его, например, для прослушивания устройства arduino:

minicom --device /dev/ttyACM0 --baud 9600

3
26.07.2019, 18:40
4 ответа

, если infileравно:

0 -1 0.000532 -0.00026 0.000465 etc...
0 0.000294 1 -0.000102 -0.1146 etc...
0 -0.000134 0.0000967 1 -0.9972 etc...

delete- это номер столбца, который вы собираетесь удалить из своего infile, например:

2 4 6

с awk, вы можете сделать что-то вроде:

awk 'NR==FNR { split($0, to_delete); next }
             # split 'delete' file into an array called to_delete on default FS (white-space)
             { for (col in to_delete) $to_delete[col]=""; print }' delete infile
             # delete the columns from 'infile' that match with $column getting from array

, что даст вам вывод со столбцами 2, 4 и 6, удаленными из файла.

0  0.000532  0.000465
0  1  -0.1146
0  0.0000967  -0.9972
1
27.01.2020, 21:29

Похоже, это то, что вы ищете:

awk '
NR==FNR { split($0,del); next }
{
    out = sep = ""
    for (i=1; i<=NF; i++) {
        if ( !(i in del) ) {
            out = out sep $i
            sep = OFS
        }
    }
    print out
}
' delete.txt mat.txt
0
27.01.2020, 21:29

Предполагая, что файл delete.txt состоит только из одной строки, мы можем получить нужные столбцы, используя следующий код:

$ perl -psale '$. == 1 and 
   @indices2P = grep { my $c=$_+1; $d !~ /\b$c\b/ } 0.. $#F;
   $_ = "@F[@indices2P]";
' -- -d="$(< delete.txt)" mat.txt

Результаты:

0 0.000532 0.000465
0 1 -0.1146
0 0.0000967 -0.9972

Пояснение:

Сохраните удаляемые столбцы в скалярной переменной $dи в самой первой строке чтения файла mat.txtвычислите индексы столбцов, которые необходимо распечатать.

Затем применяйте только эти индексы при доступе к массиву @Fдля печати.

0
27.01.2020, 21:29
$ < delete.txt \
       tr -s ' \t' '\n\n' | sort -nru |
       sed -e 's|.*|s/\\s*\\S+//&|' |
       sed -Ef - mat.txt

Результаты:

0 0.000532 0.000465
0 1 -0.1146
0 0.0000967 -0.9972

Пояснение:

Используя GNU sed с включенным расширенным режимом регулярных выражений, мы сначала создаем код sed, который при применении к файлу mat.txt даст нам желаемый результат.

Предположения:

o The file delete.txt comprises only positive integers and max value < 512
0
27.01.2020, 21:29

Теги

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