У меня есть текстовый файл.
number 1_1 \t number1_2 \t etc
number 2_1 \t number2_2 \t etc
Я хочу удалить первый столбец этого файла (соответствующий number1_1, number2_1 и т. д., то есть числа перед первой вкладкой для каждой строки). Я прочитал этот пост, в котором предлагается решение удалить первый столбец (см. Ответ Питера). Однако это не работает для меня, поскольку числа имеют разные размеры, и я не могу повторить операцию по удалению первого столбца. Как я могу это сделать?
Через awk,
awk -F"\t" '{print FS,$2}' file > newfile
Он разрезает первый столбец и печатает только оставшуюся вкладку и второй столбец.
Через sed,
[ f2]На каждой строке (%) замените (<code>/<em>ORIGINAL</em>/<em>REPLACEMENT</em>/</code>) the first occurrence of “non-tab characters ( [^ \ t] ) in any numbre ( * ) followed by a tab \ t ” by nothing. You can type <kbd>Tab</kbd> instead of \ t`.
В качестве альтернативы вы можете совместить кратчайшую последовательность символов (.\{-}), заканчивающуюся на вкладке. .*\t будет соответствовать наибольшему совпадению для .*, поэтому он будет соответствовать всем, кроме последнего столбца; .\{-} соответствует минимальному совпадению, которое является первым столбцом.
:%s/.\{-}\t//
В Vi для удаления первого столбца (разделенного пробелом) вы можете сделать:
:%norm dW
для столбца, разделенного Tab, это:
:%norm df [d2 ] Tab Tab
Таким образом, команда, которая удалит первый столбец из файла (на месте), может быть:
ex +"%norm df$(echo -e '\t')" -scwq file
Чтобы проверить вывод перед сохранением ( (d6).
Или на основе предложения Криса, например:
ex -c':exe ":%norm df\<Tab>"' -sc'%p|q!' <(echo -e "a a\tb b\tc c")
Альтернативно сделать это в визуальный режим (если начинать с верхнего левого):
Введите визуальный блок Ctrl + v. Перейдите в конец и выберите первый столбец, нажав: G, E (или отрегулируйте вручную). Нажмите d, чтобы удалить выбранный блок.Чтобы удалить оставшееся пространство перед вторым столбцом, я предлагаю:
:%norm df Ctrl + VTab x