Как удалить столбец из файла и записать результат в тот же файл, используя сценарии оболочки? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть файл (a.txt), как показано ниже,

col1|col2|col3|col4|col5|col6|col7
a|b|c|d|m|n|o
e|f|g|h|p|q|r
i|j|k|l|s|t|u

Я хочу удалить col3 из a.txt и записать результат в тот же файл .txt. Теперь файл a.txt будет выглядеть так:

col1|col2|col4|col5|col6|col7
a|b|d|m|n|o
e|f|h|p|q|r
i|j|l|s|t|u

Я выполнил удаление, используя команду 'cut', но не смог записать в тот же файл без использования команды 'mv'. как - cut -d'|' -f1-2,4- a.txt

Итак, кто-нибудь, пожалуйста, помогите мне, как мне сохранить тот же файл с новым значением.

Заранее спасибо.

1 Ответ

1 голос
/ 09 апреля 2020

Использование awk

awk -i inplace  -F'|' '{OFS="|"; $3=""; gsub(/\|\|/,"|",$0)}1' a.txt

Демонстрация:

$cat a.txt 
col1|col2|col3|col4|col5|col6|col7
a|b|c|d|m|n|o
e|f|g|h|p|q|r
i|j|k|l|s|t|u

$awk -i inplace  -F'|' '{OFS="|"; $3=""; gsub(/\|\|/,"|",$0)}1' a.txt 
$cat a.txt 
col1|col2|col4|col5|col6|col7
a|b|d|m|n|o
e|f|h|p|q|r
i|j|l|s|t|u
|
$

Объяснение:

-i inplace <- внести изменения в файл </p>

-F'|' <- установить входной файловый разделитель как <code>|

OFS="|" <- установить исходный разделитель полей как <code>|

$3="" <- установить столбец 3 пусто </p>

gsub(/\|\|/,"|",$0) <- заменить <code>|| на |

Редактировать: Используя sed

sed -i 's/[^|]*|//3' a.txt

Демонстрация

$cat a.txt 
col1|col2|col3|col4|col5|col6|col7
a|b|c|d|m|n|o
e|f|g|h|p|q|r
i|j|k|l|s|t|u
$ sed -i  's/[^|]*|//3' a.txt
$cat a.txt 
col1|col2|col4|col5|col6|col7
a|b|d|m|n|o
e|f|h|p|q|r
i|j|l|s|t|u
$

Пояснение "

$echo "a|b|d|m|n|o" | sed -e's/[^|]*|/(&)/'
(a|)b|d|m|n|o
$

[^|] - Любой символ, кроме |
* - Ноль или больше вхождений
3 3-й случай

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...