是否存在任何使用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:
答案 0 :(得分:1)
OFS
是在print
吃了一个原始(未引号)逗号时产生的
我会这样做:
$ awk -F'[,<@]' -v OFS=, '{print $2,$1,$3}' someone.txt
FN_A,LN_A,aa
FN_B,LN_B,bb
答案 1 :(得分:1)
如果您对sed
感到满意,请尝试按照以下示例(按照您显示的示例编写)进行操作。使用sed
的能力将匹配的正则表达式存储在内存中,并在替换sed
的部分时使用它,因为s/old/new
基于sed 's/\([^,]*\),\([^<]*\)<\([^@]*\)\(.*\)/\2,\1,\3/' Input_file
模式。
tidyverse