【问题标题】:Drop or remove column using awk使用 awk 删除或删除列
【发布时间】:2017-07-21 14:07:40
【问题描述】:

我想删除前 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

谁能帮帮我?

谢谢你:)

我想删除前三列

【问题讨论】:

    标签: unix awk split


    【解决方案1】:

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

    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;下一个} {$1="";$2="";$3="";print} {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--@paxdiablo ?我无法得到它
    • @karakfa 你能帮帮我吗?
    猜你喜欢
    • 2013-02-27
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2020-04-25
    相关资源
    最近更新 更多