Добавить круглые скобки в первый элемент первой строки

Решение было простым. Я просто неправильно установил переменную PATH. Новый каталог intltool в моем домашнем каталоге нужно было добавить в PATH. Я действительно пытался сделать это, но испортил команду, чтобы установить это.

0
20.04.2018, 22:06
2 ответа

Предположим, что разделителями полей в исходном файле являются табуляции (и/или вы хотите, чтобы выходные данные были разделены табуляцией -), тогда вы можете использовать awkвот так:

awk -F '\t' -v OFS='\t' '{ $1 = sprintf("(%s)", $1) } 1' file

Это модифицирует первое поле, а затем выводит повторно -сформированную строку с измененным полем. 1в конце вызывает вывод и может быть заменен на { print }.

Ваш код делает что-то подобное, но вы используете $0, то есть содержимое всей строки , а не только первого поля.

Вы также можете использовать sed, чтобы оставить остальную часть строки нетронутой:

sed -E 's/^([^[:blank:]]+)/(\1)/' file

Это соответствует любой не-пустой строке символов в самом начале строки и заменяет их той же строкой символов в круглых скобках.

Другой вариант с sed, который сначала вставляет (в начале строки, а затем вставляет )перед первым пустым символом («пустой» символ означает пробел или табуляцию):

sed -E -e 's/^/(/' -e 's/([[:blank:]])/)\1/' file

Решение awkявляется более гибким, так как позволяет легко изменять любое поле в строке, но решения sedпозволяют сохранить разделители, которые есть в исходном файле., будь то несколько пробелов или вкладок. Я включил сюда sedрешения только потому, что вы хотели изменить первое поле в строке, а это поле легко (найти с помощью )программы sed.

2
28.01.2020, 02:32

В вашем сообщении используются табуляции для разделения полей, я воспользуюсь этим.

Самое простое решение, которое сохранит все пробелы и табуляции в строке, — убедиться, что разделитель полей равен одному символу (, если в строке нет начальных символов):

$ awk -F '[\t]' -v OFS='\t' '{$1="("$1")"}1' file.txt1
(8) 089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20   102
(8) 089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9

Примечание :Если поле окружено пробелами (например ), это произойдет:

awk -F '[\t]' -v OFS='\t' '{$1="("$1")"}1'
( 8 )   089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20   102
(  8  ) 089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9

Примечание. :При наличии повторяющихся разделителей табуляциинумерация полей изменится (еще на одно поле для каждой дополнительной вкладки ).

0
28.01.2020, 02:32

Теги

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