Очень полезно, когда у Вас есть несколько классов с тем же именем в нескольких включенных пространствах имен. Например...
namespace Something.From.SomeCompanyA {
public class Foo {
/* ... */
}
}
namespace CompanyB.Makes.ThisOne {
public class Foo {
/* ... */
}
}
можно использовать псевдонимы, чтобы сделать компилятор счастливым и сделать вещи более ясными для Вас и других в Вашей команде:
using CompanyA = Something.From.CompanyA;
using CompanyB = CompanyB.Makes.ThisOne;
/* ... */
CompanyA.Foo f = new CompanyA.Foo();
CompanyB.Foo x = new CompanyB.Foo();
Вероятно, наиболее эффективный метод, если вы используете оболочку bash
(а вы, судя по вашим комментариям, так и поступаете), это использование подстроки вариант расширения параметра:
pax> long="USCAGol.blah.blah.blah"
pax> short="${long:0:2}" ; echo "${short}"
US
Это установит short
как первые два символа из long
. Если long
короче двух символов, short
будет идентичен ему.
Этот метод в оболочке обычно лучше, если вы собираетесь делать это много ( например, 50 000 раз на отчет, как вы упомянули), поскольку нет накладных расходов на создание процесса. Все решения, использующие внешние программы, будут страдать от этих накладных расходов.
Если вы также хотите обеспечить минимальную длину, вы можете предварительно дополнить ее чем-то вроде:
pax> long="A"
pax> tmpstr="${long}.."
pax> short="${tmpstr:0:2}" ; echo "${short}"
A.
Это гарантирует, что все, что меньше двух символов, будет дополнено справа точками (или чем-то еще, просто изменив символ, используемый при создании tmpstr
). Непонятно, нужно ли вам это, но я подумал, что вставлю это для полноты.
Сказав это, есть несколько способов сделать это с помощью внешних программ (например, если у вас нет bash
), некоторые из которых:
short=$(echo "${long}" | cut -c1-2)
short=$(echo "${long}" | head -c2)
short=$(echo "${long}" | awk '{print substr ($0, 0, 2)}'
short=$(echo "${long}" | sed 's/^\(..\).*/\1/')
Первые два ( cut
и head
) идентичны для однострочной строки - в основном они оба просто вернем вам первые два символа. Они отличаются тем, что cut
даст вам первые два символа каждой строки, а head
даст вам первые два символа всего ввода
Третий использует ] awk
функция подстроки для извлечения первых двух символов, а четвертый использует группы захвата sed
(с использованием ()
и \ 1
) для захвата первые два символа и замените ими всю строку. Они оба похожи на cut
- они доставляют первые два символа каждой строки ввода.
Ничего из этого не имеет значения, если вы уверены, что вводите одну строку, все они имеют одинаковые эффект.
, если mystring = USCAGoleta9311734.5021-120.1287855805
print substr(mystring,0,2)
выведет US
, где 0 - начальная позиция, а 2 - как много символов читать
Это то, что вам нужно?
my $string = 'USCAGoleta9311734.5021-120.1287855805';
my $first_two_chars = substr $string, 0, 2;
ref: substr
colrm - удалить столбцы из файла
Чтобы оставить первые два символа, просто удалите столбцы, начиная с 3
cat file | colrm 3
Если вы в bash
, вы можете сказать:
bash-3.2$ var=abcd
bash-3.2$ echo ${var:0:2}
ab
Это может быть именно то, что вам нужно…
Вы получили несколько хороших ответов, и я бы сам выбрал встроенный Bash, но поскольку вы спросили о sed
и awk
и ( почти ) никто другой не предлагал решений на их основе, я предлагаю вам следующие:
echo "USCAGoleta9311734.5021-120.1287855805" | awk '{print substr($0,0,2)}'
и
echo "USCAGoleta9311734.5021-120.1287855805" | sed 's/\(^..\).*/\1/'
awk
должно быть довольно очевидным, но вот объяснение sed
one:
Самый простой способ -
${string:position:length}
Где это извлекает подстроку $ length
из $ string
в $ position
.
Это встроенная функция bash, поэтому awk или sed не требуются.