我有一个 unix 文件 Err_Call_sipregtracking.csv 如下
colnum~filename~date~fieldnum~name~value
15~YYYYMMDD_BDACA_SELFRELATIVE_ARN~30MAR2016:00:00:00~1~BDA_CA_Code~1
15~YYYYMMDD_BDACA_SELFRELATIVE_ARN~30MAR2016:00:00:00~2~ARN_Code~2
15~YYYYMMDD_BDACA_SELFRELATIVE_ARN~30MAR2016:00:00:00~544~ALL~0
15~YYYYMMDD_BDACA_SELFRELATIVE_ARN~30MAR2016:00:00:00~544~ALL~0
这里的分隔符是
~
.我想将 name 列的不同值转换为变量
我需要的输出是:
'BDA_CA_Code','ARN_Code','ALL'
请帮我实现这个。我试过这个
cat Err_Call_sipregtracking.csv | awk -F'~' '{print $5}' | uniq
输出是:
name
BDA_CA_Code
ARN_Code
ALL
但我不想在结果中包含标题,我也希望它们用引号和逗号分隔。
最佳答案
这里的关键是将值存储在一个数组中,然后打印所有元素:
$ awk -F'~' 'NR>1{item[$5]} END {for (i in item) print i}' file
ARN_Code
BDA_CA_Code
ALL
注意使用
NR>1
跳过标题。然后,您可以使用
printf "\047%s\047\n", i
打印用单引号包裹的元素,因为 print "\047hello\047"
打印 'hello'
:$ awk -F'~' 'NR>1{item[$5]} END {for (i in item) printf "\047%s\047\n", i}' file
'ARN_Code'
'BDA_CA_Code'
'ALL'
要将这些加入以逗号分隔的项目列表,只需在从第二个 ( credits to Ed Morton ) 开始的每个项目之前打印一个逗号:
for (i in item) printf "%s\047%s\047", (++c>1 ? "," : ""), i
print ""
看看它在行动:
$ awk -F'~' 'NR>1{item[$5]} END {for (i in item) printf "%s\047%s\047", (++c>1 ? "," : ""), i; print ""}' file
'ARN_Code','BDA_CA_Code','ALL'
关于unix - 在unix中获取逗号分隔的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654568/