【发布时间】:2019-04-27 23:21:39
【问题描述】:
是否有任何使用 awk 的人至少会因 OFS 失败一次的咒语?
我有以下文件:
someone.txt
LN_A,FN_A<aa@xyz.com>;
LN_B,FN_B<bb@xyz.com>;
而且,我需要:
FN_A,LN_A,aa
FN_B,LN_B,bb
最初,我尝试了以下输出:
awk -F'[,<@]' -v OFS=',' '{print $2 $1 $3}' someone.txt
FN_ALN_Aaa
FN_BLN_Bbb
在做了一些研究后,我发现有时需要重建记录。所以,我尝试了以下方法,假设更改 NF 将重建记录。
awk -F'[,<@]' -v OFS=',' 'NF=3 {print $2 $1 $3}' someone.txt
FN_ALN_Aaa
FN_BLN_Bbb
然后,我尝试了这个:
awk -F'[,<@]' -v OFS=',' 'NF=3; {print $2 $1 $3}' someone.txt
LN_A,FN_A,aa
FN_ALN_Aaa
LN_B,FN_B,bb
FN_BLN_Bbb
那么,这次重建记录,还是没有运气:
awk -F'[,<@]' -v OFS=',' '{$1=$1} {print $2 $1 $3}' someone.txt
FN_ALN_Aaa
FN_BLN_Bbb
这个成功了,但不像预期的那样:
awk -F'[,<@]' -v OFS=',' '{$1=$1} {print $0}' someone.txt
LN_A,FN_A,aa,xyz.com>;
LN_B,FN_B,bb,xyz.com>;
最后,我做到了以下几点:
awk -F'[,<@]' '{print $2 "," $1 "," $3}' someone.txt
FN_A,LN_A,aa
FN_B,LN_B,bb
PS:
- 我知道同一行有很多问题,但我不认为这是重复的,因为它不起作用 - 至少对我来说。 :-)
- 我正在使用 GNU awk 3.1.7
【问题讨论】:
-
使用 perl。
perl -n -e '/(.*),(.*)<(.*)@/;print "$2,$1,$3\n"' < someone.txt -
谢谢,成功了!就我而言,我试图理解为什么 OFS 不能在 awk 中工作。不过感谢您的解决方案!欣赏它。
-
当然我知道这并不能回答您的问题,只是认为另一种方式可能会引起您的兴趣。我碰巧很了解 perl 而不太了解 awk。
-
不用担心。当然,了解替代选项总是更好。感谢您的解决方案。
标签: awk