Используя vipe
из moreutils . Демо с seq 20
вместо wget
.
Запустить:
seq 20 | EDITOR=less vipe | wc -l
...и less
открывает канал для просмотра. Нажмите от q
до , выйдите из less
, и появится счетчик строк из wc -l
:
.
20
Теперь сделайте то же самое:
seq 20 | EDITOR=less vipe | wc -l
... но на этот раз нажмите Ctrl -C , затем q
до выйдитеless
. Из-за Ctrl -C , wc
никогда не запускается.
Следовательно, это должно работать:
wget -qO- https://some-site.com/some-file.sh | EDITOR=less vipe | bash
А если код не устраивает, нажмите Ctrl -C .
Если вы хотите сохранить файл, несмотря на , возможно, нежелание запускать его, попробуйте следующее:
wget -qO- https://some-site.com/some-file.sh | tee /tmp/some-file.sh |
EDITOR=less vipe | bash
... и это будет работать почти так же, за исключением того, что /tmp/some -file.sh также будет иметь содержимое канала.
Вам просто нужно установить разделитель полей вывода (OFS
), например.:
awk '{ for (i=3; i<=NF; i++) $i*=2 } 1' FS=, OFS=, infile
Или используя вашу формулу:
awk '{ for (i=3; i<=NF; i++) $i = 2*(2*($i-1)+1) } 1' FS=, OFS=, infile
Выход:
A,22,2,4,6,8,10
G,26,10,12,14
X,28,20,40,20
1
в конце скрипта — это короткая -рука для{ print $0 }
Perl
может захватывать, как показано на рисунке :По предложению @Thor:
$ perl -F, -anE '$,="," ; say splice(@F,0,2), map { 2*(2*($_-1)+1) } @F' inp.csv
Использование другого подхода:
$ perl -lpe '
/^[^,]*,[^,]*/g; #positions the search engine before the 2nd comma.
s/\G,\K([^,]*)/2*(2*($1-1)+1)/ge;
' inp.csv
Утилита настольного калькулятора GNU может сделать это как:
$ < inp.csv tr ',-' ' _' | sed -Ee 's/\S+/[&]/' |
dc -e "
[q]sq
[44an]s,
[1-2*1+2*]s=
[SM lN1+sN z0<a]sa
[LMnl,x LMnl,x lN2-sN]sb
[LMl=xn lN1<, lN1-dsN0<c]sc
[?z0=q 0sN lax lbx lcx 10an z0=?]s?
l?x
"
Это простые утилиты и пояснения по запросу, так как это простые и понятные коды.
Краткое пояснение:
Утилита dc
работает со стеком, где она хранит свои данные в виде кода. Отсюда он сохраняет n извлечений в регистрах.
Строковые данные заключены в квадратные скобки.
Отсечение выполняется с помощью рекурсии.
В этом постоянном коде имеется 7 регистров, хранящих код, а именно, q =, a b c ?
Два регистра M N хранят данные.
Вяжите в обратном направлении от конца. Код прописать? выполняет действие чтение следующей строки из ввода. Затем сравнивает, сколько элементов, разделенных пробелами, находится в его стеке; думайте о них как о полях. В случае 0 остановить и выйти. Фрагмент z0=q делает это. Он читается как :z is dc команда для возврата количества присутствующих элементов. То, что мы сравниваем с 0, и если равно, выполняется код, хранящийся в регистре q.
s=`awk '{print NR}' p.txt| sort -nr | sed -n '1p'`
praveen@praveen:~$ for ((i=1;i<=$s;i++)); do m=`awk -v i="$i" -F "," 'NR==i{print NF}' p.txt`; for ((u=1;u<=$m;u++)); do if [[ $u < 3 ]]; then awk -v i="$i" -v u="$u" -F "," 'NR==i{print $u}' p.txt; else awk -v i="$i" -v u="$u" -F "," 'NR==i {print 2*$u}' p.txt; fi; done| sed "N;s/\n/,/g"| sed "N;s/\n/,/g"| sed "N;s/\n/,/g"; done
where p.txt is filename
A,22,2,4,6,8,10
G,26,10,12,14
X,28,20,40,20