Как удалить символ подчеркивания с awk

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

#!/bin/bash

AR1_p=(22 23 24 25)

for i in {1..4}
do
  echo "${AR1_p[$i-1]}"
done
1
03.01.2019, 06:26
3 ответа

попробуй

awk -F_ '{ print "Country: " $(NF-1) }' infile

Вместо этого вы можете попробовать sed.

sed -r 's/[^_]*_([^_]*)_.*/Country: \1/' infile
  • [^_]*_соответствует всем, пока не появится первый _.
  • ([^_]*)_соответствует всему после совпадения выше до следующего _и .*соответствует всему после этого, но сохраняет только часть (...)как захваченную группу.
  • \1обратная -ссылка на захваченную группу ([^_]*).
1
27.01.2020, 23:11

Использование sedвместо:

$ sed -E 's/^This is (an? )?/Country: /; s/\<_//; s/_\>//' file
Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE

Это относится к трем заменам:

  1. Заменяет текст This is, за которым может следовать либо a, либо anна Country:.
  2. Удаляет _в начале слова.
  3. Удаляет _в конце слова.

Последние две замены позволяют использовать данные в форме

This is a _big_blue_ball_

, который будет преобразован в

Country: big_blue_ball

, а не

Country: big blue ball

Альтернатива awk, которая просто игнорирует первую часть каждой строки и обрезает первый и последний символы последнего пробела -поля с разделителями:

awk '{ printf("Country: %s\n", substr($NF, 2, length($NF)-2)) }'
1
27.01.2020, 23:11

Выполнено с помощью Python

#!/usr/bin/python
import re
l=[]
k=open('file.txt','r')
for i in k:
        l.append(i)
m=re.compile(r'_.*')
for h in l:
        out=re.search(m,h)
        print "Country:",out.group().split('_')[-2]

выход

Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE
0
27.01.2020, 23:11

Теги

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