我有一个包含数百列的大文件,我只想删除第三列和第四列,并将其余列打印到文件中.我最初的想法是制作一个类似的awk脚本awk '{print $1, $2, for (i=$5; i <= NF; i++) print $i }' file > outfile
.但是,此代码不起作用.
然后我尝试了:
awk '{for(i = 1; i<=NF; i++)
if(i == 3 || i == 4) continue
else
print($i)}' file > outfile
Run Code Online (Sandbox Code Playgroud)
但这只是在一个领域打印出来的.将它分成两个脚本并将它们与unix结合起来是可能的,paste
但这似乎应该可以在一行中完成.
Car*_*rum 16
你的第一次尝试非常接近.修改它以使用printf
并包括字段分隔符对我有用:
awk '{printf $1FS$2; for (i=5; i <= NF; i++) printf FS$i; print NL }'
Run Code Online (Sandbox Code Playgroud)
怎么样的:
cat SOURCEFILE | cut -f1-2,5- >> DESTFILE
Run Code Online (Sandbox Code Playgroud)
它打印前两列,跳过第3列和第4列,然后从5开始打印到结尾.
假设您有一个制表符分隔文件,如下所示:
TEMP.TXT
field1 field2 field3 field4 field5 field6
field1 field2 field3 field4 field5 field6
field1 field2 field3 field4 field5 field6
运行以下命令将删除字段3和4并输出到行尾.
awk '{print $1"\t"$2"\t"substr($0, index($0,$5))}' temp.txt
field1 field2 field5 field6
field1 field2 field5 field6
field1 field2 field5 field6
我的例子打印到stdout.
> newFile
将stdout发送到newFile >> newFile
并将附加到newFile.
所以你可能想要使用以下内容:
awk '{print $1"\t"$2"\t"substr($0, index($0,$5))}' temp.txt > newFile.txt
有些人会争辩要削减
cut -f1,2,5- temp.txt
它产生相同的输出,并且cut非常简单,但不处理不一致的分隔符.例如,不同空格的混合.但是,在这种情况下,切割可能就是你所追求的.
你也可以在perl,python,ruby和许多其他人中完成这个,但这是最简单的awk
解决方案.
小智 6
如何将第三列和第四列设置为空字符串:
echo 1 2 3 4 5 6 7 8 9 10 |
awk -F" " '{ $3=""; $4=""; print}'
Run Code Online (Sandbox Code Playgroud)