Итак, если вы хотите напечатать поля файла, когда новая строка отделена, если вы начинаете с $, вы можете сделать:
awk '{for(i=1;i<=NF;i++){if($i~/^\$/){printf "%s\n",substr($i,2)}}}' file.txt
Расширенная форма:
awk '{
for (i=1;i<=NF;i++)
{ if($i~/^\$/)
{ printf "%s\n",substr($i,2) }
}
}' file.txt
Здесь мы итерируем по полям (for (i=1;i<=NF;i++)), если поле начинается с $ (if($i~/^\$/)), а затем печатает его с завершающей новой строкой, начиная со второго символа (printf "%s\n",substr($i,2)).
[d4 ]С другой стороны, если число полей является фиксированным и не много, то sed также является жизнеспособным вариантом, здесь предполагается два поля:
sed -nr 's/^\$([^[:blank:]]+)[[:blank:]]+\$([^[:blank:]]+)$/\1\n\2/p' file.txt
Соответствие $ в начале каждого разделенного пробела поля, захватив поле (([^[:blank:]]+)), затем в замене установите поля в качестве разделителей новой строки (1\n\2).
[d8 ] Расширенная форма:$ cat file.txt
$PILOT_FIRSTNAME $PILOT_LASTNAME
$FOO $BAR
PILOT_FOO PILOT_BAR
$ awk '{for(i=1;i<=NF;i++){if($i~/^\$/){printf "%s\n",substr($i,2)}}}' file.txt
PILOT_FIRSTNAME
PILOT_LASTNAME
FOO
BAR
$ sed -nr 's/^\$([^[:blank:]]+)[[:blank:]]+\$([^[:blank:]]+)$/\1\n\2/p' file.txt
PILOT_FIRSTNAME
PILOT_LASTNAME
FOO
BAR