2016-03-20 4 views
1

У меня есть файл, который имеет следующий вид:Awk, Shell Scripting

#id|firstName|lastName|gender|birthday|creationDate|locationIP|browserUsed 
111|Arkas|Sarkas|male|1995-09-11|2010-03-17T13:32:10.447+0000|192.248.2.123|Midori 

Каждое поле отделено с "|". Я пишу сценарий оболочки, и моя цель - удалить «-» из пятого поля (день рождения), чтобы сделать сравнения, как если бы они были числами.

Например, я хочу, чтобы пятое поле было похоже | 19950911 |

Единственное решение, которое я достиг до сих пор, удаляет все «-» из каждой строки, которая не является тем, что я хочу использовать sed.

Я был бы очень признателен, если вы покажете мне решение моей проблемы с помощью awk.

+0

Вы хотите - заменить на что угодно? –

+0

Это [домашняя работа] (http://stackoverflow.com/q/36105822/3776858)? – Cyrus

+2

@ Кир. Да, это так. –

ответ

1

AWK один лайнер:

awk 'BEGIN { FS="|" } { gsub("-","",$5); print }' infile.txt 
+0

Да, что, наконец, сработало. Но я хочу спросить еще об одном. При команде, которую вы написали, если я пишу: awk 'НАЧАТЬ {FS = "|" } {gsub ("-", "", $ 5); print ** $ 1, "|", $ 2 **} 'infile.txt Результат: «Независимо от $ 1» «blank» «|» «blank» «Независимо от того, сколько стоит 2 доллара». Как удалить пробелы? –

+1

Удалить запятые: 'print $ 1" | " $ 2'. ИЛИ вы можете установить 'OFS':' BEGIN {OFS = FS = "|"} {gsub ...; print $ 1, $ 2} '. Обратите внимание, что когда вы устанавливаете 'OFS' (разделитель выходных файлов), вы сохраняете запятые, но явно не печатаете' ''. – jas

+0

Это было очень полезно. Я ценю это. –

3

Если это домашнее задание, полный скрипт будет плохим. Некоторые подсказки: функция, которую вы должны использовать, - gsub в awk. Пятое поле $5 и вы можете установить разделитель полей по -F'|' или в BEGIN блоке, как FS="|"

Кроме того, номера строк в NR переменной, чтобы пропустить первую строку, например, вы можете добавить условие NR>1

+0

Моя проблема в том, что я читаю греческий язык, и я не могу найти надлежащую документацию gsub, которую я могу понять. Задача домашней работы заключается только в том, что это «однострочное» решение, поэтому я не написал полный скрипт. –

1

Чтобы сохранить "|" как разделитель вывода, лучше определить значение OFS как «|» :

... | awk 'BEGIN { FS="|"; OFS="|"} {gsub("-","",$5); print $0 }'