Unix 使用awk拖放或删除列

Unix 使用awk拖放或删除列,unix,awk,split,Unix,Awk,Split,我想删除前3列 这是我的数据 DETAIL 02032017 Name Gender State School Class A M Melaka SS D B M Johor BB E C F Pahang AA F EOF 3 我希望我的数据如下所示: DETAIL 02032017 School Class SS D

我想删除前3列

这是我的数据

DETAIL 02032017 

Name    Gender  State   School  Class
A          M    Melaka  SS  D
B          M    Johor   BB  E
C          F    Pahang  AA  F
EOF 3               
我希望我的数据如下所示:

DETAIL 02032017             
School  Class
SS       D
BB       E
AA       F
EOF 3   
这是我当前获得的命令mycommandoutput:

awk -v date="$(date +"%d%m%Y")" -F\| 'NR==1 {h=$0; next} 
{file="TEST_"$1"_"$2"_"date".csv";  
print (a[file]++?"": "DETAIL"date"" ORS h ORS) $0 > file} END{for(file in a)     print "EOF " a[file] > file}' testing.csv
有人能帮我吗

谢谢:)


我想删除前三列

如果您只想删除前三列,您可以将它们设置为空字符串,而不考虑没有三列的字符串,例如:

awk 'NF>=3 {$1=""; $2=""; $3=""; print; next}{print}'
这有一个潜在的恼人习惯,即在这些空字段之间仍然有字段分隔符,但是,由于修改列将重新格式化行,因此我认为这是可以的:

DETAIL 02032017
   School Class
   SS D
   BB E
   AA F
EOF 3
如果
awk
是处理它们的唯一工具,那么间距就无关紧要了。如果要保留格式(意味着列位于行上非常特定的位置),只需获取整行的子字符串即可:

awk '{if (NF>=3) {$0 = substr($0,25)}; print}'
由于这不会修改单个字段,因此不会触发将更改其格式的行的重新计算:

DETAIL 02032017
School Class
SS  D
BB  E
AA  F
EOF 3

你是说我需要这样做吗awk-v date=“$(date+%d%m%Y”)”-F\|'NR>=1{h=$0;next}{$1=“”;$2=“”;$3=“”;print}{file=“TEST”$1”“$2”“date.csv”;print(a[文件]+?:“细节”日期”或h ORS)$0>文件}结束{for(a中的文件)print“EOF”a[文件]>文件}”testing.csv--@paxdiablo?我找不到it@karakfa你能帮我吗?