Awk 对特定行的每一列应用sed命令

Awk 对特定行的每一列应用sed命令,awk,sed,Awk,Sed,我有一个选项卡分隔的文件: samplename1/filename1 anotherthing/anotherfile asdfgh/hjklñ 2 3 4 5 6 7 我正在尝试使用sed删除文件头中的/之后的所有内容: sed 's/[/].*//' samplenames

我有一个选项卡分隔的文件:

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 

使用GNU
sed
,您可以使用

sed -i '1 s,/[^[:space:]]*,,g' samplenames.txt
使用FreeBSD sed,您需要在
-i
之后添加
'

-i
选项将使
sed
内联更改文件。
1
表示只修改文件中的第一行

s、/[^[:space:][]*、g
命令意味着所有出现的
/
后面都会有0个或多个非空白字符将被删除。

给定:

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
您可以使用
命令使它们对齐:

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

sed-i'1s,/[^[:space:][]*,g'samplenames.txt
?看,是的,这已经奏效了!