Откуда появились эти монохромные значки Thunderbird?

Итак, если вы хотите напечатать поля файла, когда новая строка отделена, если вы начинаете с $, вы можете сделать:

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
1
задан 1 December 2011 в 00:29

0 ответов

Другие вопросы по тегам:

Похожие вопросы: