Как преобразовать многострочную инструкцию if в однострочную инструкцию if с помощью скрипта unix? [closed]

perl -F'\s+' -lane '
   s/\r$//; my $i = join $;, @F[0,3];
   @ARGV and $h{$i} = $F[4],next;
   print exists $h{$i} ? s/$/ $h{$i}/r : $_;
' File2 File1

Дает:

chr19   4124051 4124250 1
chrX    154458151   154458200   2
chr22   37019451    37019600    3
chr15   74995401    74995550    4 CUP
chr12   128823901   128824100   5 CUP
0
20.08.2017, 13:15
2 ответа

Пропустите его через инструмент для отступов, такой как indentили clang-format. Они знают правила грамматики C и C++ и переформатируют ваш код в соответствии с тем, как вы их настроите. clang-formatдаже использует тот же анализатор языка, что и компилятор clang.

Например:

$ cat test.c
if ( a==b ||
c!=d &&
(e>f))
{
/* do something */
}

$ clang-format test.c
if (a == b || c != d && (e > f)) {
  /* do something */
}

$ clang-format --style="{BreakBeforeBraces: Allman}" test.c
if (a == b || c != d && (e > f))
{
  /* do something */
}

$ indent -kr -st <test.c
if (a == b || c != d && (e > f)) {
/* do something */
}

$ indent -kr -bl -st < test.c
if (a == b || c != d && (e > f))
{
/* do something */
}

indent, используемый в приведенном выше примере, — это GNU indent, а не indentпо умолчанию, встречающийся в системах BSD.

4
28.01.2020, 02:19

Можно сделать с помощьюawk:

awk '(/^\{/ || flag)&&/^[^}]/{printf "\n%s",$0;flag=1} 
      /^\}/{flag=0; printf "\n}\n" ;next} 
     (!flag){printf "%s ",$0}' infile.txt
0
28.01.2020, 02:19

Теги

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