Как использовать команду сокращения для получения первых и последних элементов строки?

xargs может не быть лучший инструмент, который я предложил бы fgrep если Ваш file-of-strings-to-match только содержит строки, не регулярные выражения.

fgrep -f strings.txt subdirectory/*

Я предлагаю fgrep как традиционный Unix grep и egrep не имел "-f" опции. Я верю тому GNU grep и egrep действительно имейте "-f" опцию, поэтому если бы Ваш файл имеет регулярные выражения в нем, Вы хотели бы использовать версию GNU.

3
13.04.2017, 15:36
3 ответа

На Вашей версии SunOS nawk(или в этом отношении awk) должен смочь добиться цели

 nawk -F';' 'BEGIN{OFS=";"}{print($1,$2,$3,$(NF-1),$(NF))}' file.txt 
5
27.01.2020, 21:09

Вот решение нескольких-команд для получения первых 3 и последних 2 полей с помощью только cut, rev (для инвертирования) и оболочка-builtins:

while read line
do
    first=$(echo -n "$line" | cut -d ";" -f -3)
    second=$(echo -n "$line" | rev | cut -d ";" -f -2 | rev)
    echo "$first;$second"
done < my_file

Эти операторы могут также быть помещены в одну строку, конечно.

Править:

Я собрал некоторые короткие альтернативы rev (которые опускают печатать финал '\n'):

Python: python -c "import sys; sys.stdout.write(raw_input()[::-1])

жемчуг: perl -ne 'chomp;print scalar reverse;'

и существует намного больше возможностей для инвертирования строки. Возможно, некоторые из тех работают над Вашей системой.

5
27.01.2020, 21:09
  • 1
    Argh. Ваше решение кажется интересным, но к сожалению, команда rev не установлен на моем сервере (SunOS 5.10) –  Romain Linsolas 07.01.2013, 16:59
  • 2
    @romaintaz сообщения Слишком плохо, мой rev прибывает из util-linux пакет, который содержит различные существенные команды для Linux. Интересно, имеет ли SunOS подобную команду. –  scai 07.01.2013, 17:01
% cat a
1;foo;bar;#@$"é&^l#;baz;x;y;z
2;foo;bar;#¤=é;)o'#;baz;x;y;z
3;foo;bar;#]]'~é{{#;baz;x;y;z
% sed -r 's,^(([^;]+;){3}).*;([^;]+;[^;]+)$,\1\3,' < a
1;foo;bar;y;z
2;foo;bar;y;z
3;foo;bar;y;z
2
27.01.2020, 21:09
  • 1
    , из которого я боюсь что моя версия sed слишком старо, поскольку Ваша команда бросает a sed: illegal option -- r :( –  Romain Linsolas 07.01.2013, 17:00

Теги

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