У меня есть файл с разделителями табуляции с 3 столбцами, в котором я хочу заменить пустые значения во втором столбце строкой UNKNOWN '.
Я попытался awk -F'\t' '$2 && !$3{ $2="UNKNOWN" }1' file
, но он не заменил пустые места в нескольких строках.
файл
MSTRG.1,,0
MSTRG.10,LOC102399924,331
MSTRG.100,GINS4,108
MSTRG.1000,LOC112585730,0
MSTRG.10000,LOC112585902,0
MSTRG.10013,LOC112585696,100
MSTRG.10014,,234
MSTRG.10015,,918
MSTRG.10016,DPH2,242
Я преобразовал файл с ограничением табуляции в файл CSV с помощью sed's/\t/,/'g
. Я хочу заменить пустые 2-е столбцы строкой «Неизвестно».
В дополнение к [1 113] комментарий steeldriver, который должен хорошо работать, Вы могли также просто заменить последовательные вкладки (\t\t
) "НЕИЗВЕСТНЫМ", окруженным вкладками (\tUNKNOWN\t
).
С sed
:
sed -i 's/\t\t/\tUNKNOWN\t/' file
-i
изменяет файл на месте. С awk
версия> 4.1.0:
awk -i inplace '{sub(/\t\t/, "\tUNKNOWN\t")}1' file
-i inplace
изменяет файл на месте. 1
в конце просто печатает содержание файла. С [1 110] версия < 4.1.0, -i inplace
опция не существует, таким образом, для подражания -i inplace
необходимо сохранить файл к временному и затем переименовать его как текущий:
awk '{sub(/\t\t/, "\tUNKNOWN\t")}1' file > tmp && mv tmp file