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
Пропустите его через инструмент для отступов, такой как 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.
Можно сделать с помощьюawk
:
awk '(/^\{/ || flag)&&/^[^}]/{printf "\n%s",$0;flag=1}
/^\}/{flag=0; printf "\n}\n" ;next}
(!flag){printf "%s ",$0}' infile.txt