Поиск и замена n-го столбца с помощью awk [duplicate]

Очистить все полностью:

sudo subscription-manager remove --all
sudo subscription-manager unregister
sudo subscription-manager clean  

Зарегистрировать текущую подписку:

sudo subscription-manager register
sudo subscription-manager refresh
sudo subscription-manager attach --auto

Перейти на Портал клиентов и еще раз проверьте, все ли правильно.

Если проблема не исчезнет, ​​обратитесь в службу поддержки клиентов .

1
09.07.2018, 07:03
3 ответа

Попробуйте это:

awk -F, '{ if ($3 == "xyz") $3="abc";}1' OFS=, test.csv
3
27.01.2020, 23:23

Вы не упомянули, чем хотите его заменить, поэтому я просто использую ghiв качестве заполнителя:

Если это реальный текст, то проще всего использовать sed. Вы можете сделать это с помощью awk, но это только отправит модификацию на стандартный вывод, тогда как sedможет изменить сам файл, что объясняется ниже:

sed '2s|xyz|ghi|1' file

Объяснить:

2s replaces instances on the second line
xyz is what you want to replace
ghi is what it's being replaced with
1 replaces the first instance of it on the specified line

Выход:

col1,col2,col3,col4
abc,def,ghi,xyz
xyz,abc,def,xyz

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

sed -i '2s|xyz|ghi|1' file

Если есть другие строки и столбцы, где вы можете заменить его, вам нужно будет изменить 2sи 1, чтобы указать местоположение (s )и экземпляр (s ). ]. Очевидно, вы также замените ghiлюбой заменой, которую хотите.

Если в столбце 3 есть другие строки, в которых необходимо заменить xyz, вы можете использовать переключатель e. Например:

col1,col2,col3,col4
abc,def,xyz,xyz
xyz,abc,def,xyz
abc,def,xyz,abc

xyzтакже появляется в четвертой строке столбца 3.

sed -e '2s|xyz|ghi|1' -e '4s|xyz|ghi|1' file

sed -i -e '2s|xyz|ghi|1' -e '4s|xyz|ghi|1' file

Это также заменит первый экземпляр в четвертой строке, используя -eдля указания каждого потока замен. Переключатель -iизменяет файл, а не только отправляет его на стандартный ввод.

0
27.01.2020, 23:23
awk -F ',' -v needle='xyz' -v replacement='foobar' 'BEGIN{ OFS = FS; } (NR > 1 && $3 == needle) { $3 = replacement; } 1' input.txt

Задайте требуемые значения needleи replacement.NR > 1гарантирует, что в первой строке (, явно содержащей заголовки столбцов ), не произойдет замены.

0
27.01.2020, 23:23

Теги

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