我想请求您帮助解析shell中的文件。
这是我的数据:
ID:1 g-t="Demo one" rfid="af7e 25" t-link="http://demo.site.com/api2",User af73 25 http://example.com/useraf73
ID:2 g-t="Demo one" rfid="77 63" t-link="http://demo.site.com/api",User 77 http://example.com/user77
没有通用的分隔符,基本上我需要这些字段:
ID=1 | g-t="Demo one" | rfid="af7e 25" | t-link="http://demo.site.com/api2" | User af73 25 | http://example.com/useraf73
这是我被困的地方:
awk '{match($0,"g-t=([^\" ]+)",a)}END{print a[1]}'
我试图将双引号与空格匹配,但我不知道为什么它不打印结果。除双引号外,所有字符都可以正常工作。 我做错了什么? Awk不是必须的,我愿意接受建议。
感谢。
答案 0 :(得分:1)
我已经有一段时间了,因为我经常使用awk但是如果我记得正确匹配()只需要2个args而END {}只发生一次,而不是像我想要的那样每一行。类似的东西:
awk '{match($0,/g-t="([^\"]+")/); print substr($0, RSTART, RLENGTH)}' dataFile
可能更贴近您的想法?
蛮力Perl one-liner看起来像这样:
perl -lne 'if (m/ID:(\S+) g-t="([^"]+)" rfid="([^"]+)" t-link="([^"]+)",User (.*) (http:.*)/){print "$1|$2|$3|$4|$5|$6"}' dataFile
并演示如何通过OR条分隔所有字段数据。您可以移动()组以获得或多或少的每个结果$ 1,$ 2等所需的文本...有关详细信息,请参阅 perldoc perl 。