Используя BASH, выберите строку и столбец [команда CUT?] - PullRequest
0 голосов
/ 19 марта 2020
1   A   18  -180
2   B   19  -180
3   C   20  -150
50  D   21  -100
128 E   22  -130
10  F   23  -0
10  G   23  -0

В приведенном выше файле я легко могу распечатать столбец с помощью команды cat.

cat /file_directory | cut -d' ' -f3

В этом случае выводом будет третий столбец.

Но, что я хочу сделать, это нечто другое. Например, я хочу выбрать элемент в зависимости от элемента строки.

Так что, если я выберу B из второго ряда, распечатка будет [row associated "B" in the second column ][column =3] = [2][3]., что составляет всего 19, а не что-нибудь еще. КАК ЭТО СДЕЛАТЬ?

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Использовать awk:

$ awk '$2 == "B" {print $3}' file.txt
19

awk разбивает каждую строку на поля (по умолчанию используется произвольный пробел и разделители полей). Каждый оператор состоит из двух частей: шаблон для выбора строки и действие, которое необходимо выполнить для выбранной строки. Выше мы проверяем, имеет ли 2-й столбец ($2) значение "B"; для каждой строки, для которой это верно, мы печатаем значение в 3-м столбце.

0 голосов
/ 19 марта 2020
#!/bin/sh

cat sofile+.txt | tr -s ' ' > sofile1+.txt
mv sofile1+.txt sofile+.txt

cat > edcommands+.sh << EOF
/B/
EOF

line=$(ed -s sofile+.txt < edcommands+.txt)
echo ${line} | cut -d' ' -f2,3
rm ./edcommands+.txt

Sofile + .txt - это то, что содержит ваши данные.

Для этого вам также может понадобиться установить ed, поскольку, к сожалению, его нет в большинстве дистрибутивов по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...