2015-04-23 2 views
1

Я новичок в сценариях оболочки, и я очень смущен между awk -FS и awk -f используемыми командами. Я пробовал читать несколько страниц о различии между этими двумя, но не мог четко понять. Незлая помощь. Вот пример: Давайте рассмотрим, что текстовый файл говорит: data.txt имеет следующие данные.Разница между awk -FS и awk -f в сценариях оболочки

S.No Product Qty Price 
1-Pen-2-10 
2-Pencil-1-5 
3-Eraser-1-2 

Теперь, когда я пытаюсь использовать следующую команду:

$ awk -f'-' '{print $1,$2} data.txt 

Я получаю ниже результат:

1 Pen 
2 Pencil 
3 Eraser 

Но когда я использую команду:

$ awk -FS'-' '{print $1,$2} data.txt

выход:

1-Pen-2-10 
2-Pencil-1-5 
3-Eraser-1-2 

Я не понимаю разницы это с помощью команды -FS. Может ли кто-нибудь помочь мне в том, что именно происходит между этими двумя командами. Благодаря!

ответ

5

Вы более смущены, чем думаете. Нет -FS.

FS - это переменная, содержащая разделитель полей.

-F это опция, которая устанавливает FS в свой аргумент.

-f - это опция, аргумент которой является именем файла, который содержит исполняемый скрипт.

Скрипты, размещенные произвел бы синтаксических ошибок, не выход вы говорите, что они получают, так ИДК, что сказать ...

+0

Спасибо! Я думаю, что я понял эту концепцию очень плохо. моя вина. Спасибо за разъяснения. Будет работать над этим. – Dev

+0

Технически '-FS '-'' такой же, как '-F" S- "'. Итак, 'echo" QRS-TUV "| awk -FS'- '' {print $ 1, $ 2} '' выходы 'QR TUV' –

+0

Это было то, о чем я сомневался. но когда я пытаюсь использовать 'echo" ABC-DEF "| awk -FS'- '' {print $ 1, $ 2} '', я получаю только ABC-DEF – Dev

2

-FS не является аргументом в AWK. -F есть, как есть -f.

Аргумент -F указывает awk, какое значение использовать для FS (разделитель полей).

Аргумент -f указывает awk использовать его аргумент в качестве файла сценария для запуска.

Эта команда (я установил ваш цитирую):

awk -f'-' '{print $1,$2}' data.txt 

говорит AWK использовать стандартный ввод (это то, что - средства) для аргумента. Это должно зависать при работе в терминале. И после этого должна быть ошибка, так как awk пытается использовать '{print $1,$2}' в качестве имени файла для чтения.

Эта команда:

awk -FS'-' '{print $1,$2} data.txt 

рассказывает AWK использовать S- в качестве значения FS.Который вы можете увидеть, выполнив эту команду:

awk -FS'-' 'BEGIN {print "["FS"]"}' 
+0

Спасибо! моя вина. нужно больше работать над этой концепцией. Спасибо за разъяснения. Будет работать над этим. – Dev

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