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
?看,是的,这已经奏效了!