2016-12-06 2 views
0

У меня нет опыта работы с awk. У меня есть список имен с телефонными номерами и другими данными. Я хочу знать, как изменить информацию для печати по LastName, FirstName, другой информации. Так мой файл в настоящее время упорядочен;Разделение и перестановка в awk

FirstName LastName:(510) 548-1278:250:100:175 

Посмотрите, как фамилия прикреплена к региональному коду w/no whitespace? Поэтому я не могу сделать «{print $ 2 $ 1}», так как это дает мне фамилию и код области. Я хочу, чтобы это было похоже;

LastName , FirstName (510) 548-1278:250:100:175 

Как разделить символы в строке?

+2

Настоящие имена могут содержать пробелы. В некоторых странах очень часто встречаются два или более имени и фамилии. При этом входные данные не могут быть проанализированы автоматически – hek2mgl

ответ

0

Возможно, это может вам помочь.

awk -F'[ :]' '{printf "%s , %s %s %s:%s:%s:%s\n", $2, $1,$3,$4,$5,$6,$7}' yourFile 

Тест:

$ echo "FirstName LastName:(510) 548-1278:250:100:175" | awk -F'[ :]' '{printf "%s , %s %s %s:%s:%s:%s\n", $2, $1,$3,$4,$5,$6,$7}' 
LastName , FirstName (510) 548-1278:250:100:175 
+0

Удивительное спасибо. Однако я пытаюсь понять это. так что '[:]' говорит awk использовать пустое пространство и двоеточие для разделителя? Что касается пробелов, почему пустое пространство должно быть до двоеточия? –

+0

@HillariDenny, Да, awk использовать оба для разделителя. –

0

Вы могли бы сделать это с sed

echo "FirstName LastName:(510) 548-1278:250:100:175" | sed 's//, /;s/:/ /' 

Первая заместительная s//, / вставляя запятую, когда первое пространство встречается.

Вторая замена s/:/ / заменяет : пробелом.

Смежные вопросы