Jeni
Jeni

Reputation: 968

Apply a sed command to every column of a specific row

I have a tab separated file:

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

I am trying to remove everything after the / just in the header of the file using sed:

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

How can I do this for each column of the file? because right now I am removing everything after the first /, but I want to remove just the part of each column after the /.

Actual output:

samplename1
     2                  3                4
     5                  6                7

Desired output:

samplename1          anotherthing            asdfgh
    2                     3                    4
    5                     6                    7 

Upvotes: 1

Views: 623

Answers (2)

dawg
dawg

Reputation: 103884

Given:

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

Here is an POSIX awk to do this:

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

Prints:

samplename1 anotherthing    asdfgh
2   3   4
5   6   7

You can get those to line up with the column command:

awk -F $"\t" 'NR==1{gsub("/[^\t]*",""); print; next} 1' file | column -t
samplename1  anotherthing  asdfgh
2            3             4
5            6             7

Upvotes: 0

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626952

With GNU sed, you may use

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

With FreeBSD sed, you need to add '' after -i.

See the online demo

The -i option will make sed change the file inline. The 1 means only the first line will be modified in the file.

The s,/[^[:space:]]*,,g command means that all occurrences of / followed with 0 or more non-whitespace chars after it will be removed.

Upvotes: 2

Related Questions