Unix 使用awk拖放或删除列
我想删除前3列 这是我的数据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
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你能帮我吗?