Учитывая ввод формы
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar foolkasjfdrte
как я могу обрезать только второй столбец? Разделителем является TAB, а длина второго столбца должна быть не более 75 символов.
text-processing
sed
awk
LoukiosValentine79
источник
источник
awk 'BEGIN{OFS=FS="\t"} {$2=substr($2,1,75)}1' file
Ответы:
Если вы хотите напечатать только первые 75 символов второго столбца (включая пробелы и предполагая, что в файле только два столбца), вы можете сделать:
Или с GNU
sed
:Или:
В качестве альтернативы вы можете использовать
fold
указание обрезать первые 91 символ (это 8 для идентификатора и еще 8 для вкладки) и вывести только первую строку:Если ваш файл может иметь более 2 столбцов и вы хотите только усечь второй, вы можете это сделать (что, как я только что заметил, является лишь перепиской ответа Стивена ):
Или (обратите внимание, что это сломается, если первые 75 символов 2-го столбца можно будет интерпретировать как регулярное выражение):
источник
sed
команда также использует GNUism (\t
).\t
такое GNUism? Шутки в сторону? Каков переносимый способ описания вкладки тогда?\n
(и опять же не[...]
во многих реализациях), ни одна на RHS.perl
имеет мало смысла. Подумайте, например, о входе, какaba\t.*
Используя
awk
, разделите файл с помощью вкладок и выведите первое поле полностью и первые 75 символов (самое большее) второго:Как указал fedorqui , вы можете обрабатывать файлы с более чем двумя полями, заменяя поля, которые нужно усечь:
Вы можете применить
substr
к нескольким полям, зацикливая их при необходимости.источник
;
?/pattern/ {action} {exception-handling}
). Теперь это было бы крайне маловероятно, если учесть, что пропуск этих правил;
довольно распространен.Портативно / POSIXly с
sed
:Или обрезать каждый столбец:
источник
Если есть только 2 столбца:
{0,75}
означает выбрать от 0 до 75 символов..*
это удаленный раздел за 75 символовЕсли есть 2 или более столбцов:
[^\t]*
это удаленный раздел за 75 символовисточник
sed
а этоPOSIXLY_CORRECT
не в окружающей среде ..