В определенном столбце отредактируйте строки, которые не равны ни одной из трех возможных переменных, предпочтительно в awk

Вероятно, вам нужно смонтировать файловую систему debugfs:

mount -t debugfs none /sys/kernel/debug

Если у вас уже есть собственный сценарий запуска в /etc/init.d/, вы можете добавить его туда или добавить в /etc/fstabкак

debugfs /sys/kernel/debug debugfs defaults
1
08.08.2019, 16:01
4 ответа
awk -F, -v OFS=, \
  -v "a=$GrabVariantOption1" \
  -v "b=$GrabVariantOption2" \
  -v "c=$GrabVariantOption3" \
  -v "x=$Column" '
  $x != a && $x != b && $x != c {$x = "X"}
  {print}'

Или здесь, поскольку это одиночные буквы ASCII:

awk -F, -v OFS=, \
  -v "pattern=^[$GrabVariantOption1$GrabVariantOption2$GrabVariantOption3]\$" \
  -v "x=$Column" '
  $x !~ pattern {$x = "X"}
  {print}'

NR— это специальная переменная в awk, которая содержит текущий номер записи (номер строки здесь с разделителем записей по умолчанию ). $— оператор разыменования поля. Таким образом, если xявляется номером поля, $ xдает вам содержимое x-го поля.

4
28.04.2021, 23:30

Вот один из способов взглянуть на pbm с помощью Gnu sed, использующего расширенные регулярные выражения:

$ col=1 opt1=G opt2=g opt3=G
$ opt=${opt1}${opt2}${opt3}
$ sed -Ee "
   s/^/,/
   s/(([^,]*,){$col})[^$opt]/\1X/
   s/,//
" file.csv

С Perl вы можете сделать то же самое:

$ perl -lpe "
   s/^/,/;
   substr(\$_,2*$col-1,1) =~ tr/$opt/X/c;
   s/,//;
" file.csv
0
28.04.2021, 23:30

Попробуйте это,

awk -F ',' -v a=$GrabVariantOption1 -v b=$GrabVariantOption2 -v c=$GrabVariantOption3 -v x=$Column -v OFS=',' '{if (($x != 'a') && ($x != 'b') && ($x != 'c')) {$x="X"}; print }' input.txt 
A,A,A,X
A,G,T,X
X,A,G,T
A,C,G,T
X,X,A,g
g,T,A,A
X,s,G,A
G,s,m,A
1
28.04.2021, 23:30

Другой вариант:

awk -v col=1 -v keys="$GrabVariantOption1,$GrabVariantOption2,$GrabVariantOption3" '
    BEGIN {
        FS = OFS = ","

        # keys is a single string: "A,g,G"

        n = split(keys, a)

        # now, n=3 and a is the array ("A", "g", "G")

        for (i=1; i<=n; i++) keep[a[i]] = 1

        # now, keep is an associative array mapping "A"=>1, "g"=>1, "G"=>1
        # ("A" in keep) is true
        # ("C" in keep) is false
    }
    !($col in keep) {$col = "X"}
    {print}
' input
2
28.04.2021, 23:30

Теги

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