Что-то вроде этого может выполнить эту работу (с помощью awk-скрипта найдите 1-й токен, чтобы он был тире, а 3-й, чтобы быть строкой «сумма»):
awk '$1=="-" && $3=="amount" {print $2}'
Если вы хотите, чтобы вся строка была напечатана, используйте что-то вроде:
awk '$1=="-" && $3=="amount" {print}'
В случае, если вокруг запятой могут быть пробелы или другие пробелы-sedрешение:
sed 's/[[:blank:]]*,[[:blank:]]*/\
/g' file
В некоторых реализациях sed
вы можете заменить \<newline>
на \n
.
Вы можете использовать cut
следующим образом:
Я не знаю, откуда берутся ваши данные. Но я уверен, что вы можете передать свою информацию наcut
:
cat yourfile.data | cut -d, --output-delimiter ' ' -f 1,2
согласноman cut
...
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
--output-delimiter=STRING
use STRING as the output delimiter the default is to use the input delimiter
-f, --fields=LIST
select only these fields; also print any line that contains no delimiter character, unless the -s option is specified
...
Но если вам нужно добавить дополнительную логику, я рекомендую вам использовать sed
, как сказал @RomanPerekhrest. У вас будет более гибкий способ анализа данных с помощью мощных регулярных выражений. На мой взгляд, лучшим регулярным выражением для этого было бы:
'/^\s*\([^,]\+\)\s*,\s*([^,]\+\)\s*$/'
~0 или более пробелов после чего-либо, кроме запятой, после 0 или более пробелов, запятой, 0 или более пробелов после чего-либо, кроме запятой, после 0 или более пробелов.
Если вы хотите сохранить структуру столбцов, вот как можно заменить только запятые пробелами.
В баш:
while IFS=, read -r field1 field2; do
printf "%s %s\n" "$field1" "$field2"
done < test.txt
С помощьюtr
(в конкретном случае, который вы предоставили ), вы можете перевести comma
вnew line
user@server[/test]> cat text.txt
ent0
ent4
ent1,ent5
ent2,ent6
ent3,ent7
ent29,ent30
user@server[/test]> cat text.txt| tr "," "\n"
ent0
ent4
ent1
ent5
ent2
ent6
ent3
ent7
ent29
ent30