Примените команду sed к каждому столбцу указанной c строки - PullRequest
1 голос
/ 08 мая 2020

У меня есть файл, разделенный табуляцией:

samplename1/filename1   anotherthing/anotherfile    asdfgh/hjklñ
        2                        3                      4
        5                        6                      7

Я пытаюсь удалить все после / только в заголовке файла, используя sed:

sed 's/[/].*//' samplenames.txt

Как я могу сделать это для каждого столбца файла? потому что прямо сейчас я удаляю все после первого /, но я хочу удалить только часть каждого столбца после /.

Фактический результат:

samplename1
     2                  3                4
     5                  6                7

Желаемый вывод:

samplename1          anotherthing            asdfgh
    2                     3                    4
    5                     6                    7 

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

С GNU sed вы можете использовать

sed -i '1 s,/[^[:space:]]*,,g' samplenames.txt

С FreeBSD sed вам нужно добавить '' после -i.

См. Онлайн-демонстрацию

Параметр -i заставит sed изменить файл встроенным. 1 означает, что в файле будет изменена только первая строка.

Команда s,/[^[:space:]]*,,g означает, что все вхождения /, за которыми следует 0 или более непробельных символов, будут удалены.

0 голосов
/ 08 мая 2020

Дано:

printf "samplename1/filename1\tanotherthing/anotherfile\tasdfgh/hjklñ
2\t3\t4
5\t6\t7" >file # ie, note only one tab between fields...

Вот POSIX awk для этого:

awk -F $"\t" 'NR==1{gsub("/[^\t]*",""); print; next} 1' file

Выводит:

samplename1 anotherthing    asdfgh
2   3   4
5   6   7

Вы можете выстроить их в линию с помощью команды column:

awk -F $"\t" 'NR==1{gsub("/[^\t]*",""); print; next} 1' file | column -t
samplename1  anotherthing  asdfgh
2            3             4
5            6             7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...