Как я циклично выполняюсь через файл с awk

Это обратная косая черта. Обратная косая черта снимает следующий персонаж и заставляет его потерять особый смысл. Команда sed читает то, что вы набрали как (здесь только выражение sed, я не буду делать всю утомительную командную строку оболочки):

s
<SPACE>
C
:
Literal <SPACE>
/root/
<SPACE>

Вы сказали sed, что хотите использовать в качестве маркера для выражения, которое вы ищете, и замены. Но sed надеется увидеть нечто вроде:

s
<SPACE>
C
:
Literal \
<SPACE>
/root/
<SPACE>

Чтобы сделать обратный слеш буквальным, дополните его обратным слешем:

sed -e 's C:\\ /root '

Лично я предпочел бы избежать использования пробела. Я бы использовал что-нибудь вроде | или ;. Но у тебя все равно были бы проблемы с обратным слешем. Что действительно забавно, так это то, что вам нужно набрать что-то, чтобы использовать обратный слеш в качестве разделителя. :)

.
1
20.01.2015, 23:47
3 ответа

В то время как (учитывая ваш вход) Не совсем понятно, что вы пытаетесь сделать в полной мере, проблема с выходом заключается в том, что только последняя линия, подаваемая в awk, будет напечатана Из-за того, что вы поместите печать в конце концов.

Это должно выглядеть так:

BEGIN { 
  RS="\n\n"; FS=" ";
}
{ 
  print $1,$2,$3,$4,$5; 
}

Примечание. Отступ - это только мои личные предпочтения.

1
27.01.2020, 23:51

PURE SED One-LiLER:

sed ':X;N;s/*//;$!bX;s/\n  /\t/g;:Y;s/\n\n//g;tY' $WORKFILE

Это может выглядеть довольно сложным, но в основном он удаляет все * , а затем удаляет все новые двумя пробелами ( '\ N' ) и, наконец, удаляет двойные новинки \ N \ N для очистки. Скорее всего, это экспрессия может быть упрощена.

Я включал вкладку \ T вместо пробелов в качестве полевого сепаратора для лучшего количества столбцов, вывод

 syopsf00          a0000096                782            1        CAStmtInv
 syopsf00          a0000096                782            1        USStmtInv
 syopsf00          a0000096                606            1        CAStmtInv
 syopsf00          a0000096                606            1        USStmtInv
 syopsf00          a0000096              23472            4        AO
 syopsf00          a0000096              23472            4        Dealer
0
27.01.2020, 23:51

Я надеюсь, что подошвы awk будет достаточно

awk '
     /syopsf00/{print ""}
     !/^[*]/{printf "%s",$0}
     END{print ""}
    ' $WORKFILE >> $OUTPUTFILE

или если вы хотите потрите многопространства и использовать awk-scriptfile:

awk -f test.awk "$WORKFILE" >> "$OUTPUTFILE"

где test.awk :

#!/usr/bin/awk -f
/syopsf00/{print ""}
!/^[*]/{printf ("%s",$1" "$2" "}
END{print ""}
0
27.01.2020, 23:51

Теги

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