将使用awk的多个字符替换为,逗号表示csv

将使用awk的多个字符替换为,逗号表示csv,awk,Awk,亲爱的 我有以下列表,其中有时包含10000个条目: listID.14.1 = STRING: test1 listID.14.2 = STRING: test2 listID.14.3 = STRING: test3 listID.14.4 = STRING: test4 listID.14.5 = STRING: test5 listID.14.6 = STRING: test6 listID.14.7 = STRING: test7 我希望输出像这样 test1,test2,tes

亲爱的

我有以下列表,其中有时包含10000个条目:

listID.14.1 = STRING: test1
listID.14.2 = STRING: test2
listID.14.3 = STRING: test3
listID.14.4 = STRING: test4
listID.14.5 = STRING: test5 
listID.14.6 = STRING: test6
listID.14.7 = STRING: test7 
我希望输出像这样

test1,test2,test3,...,test7
awk '{ a = a","$4 } END {print a }' < foo
我使用了下面的代码,它比新行更准确,因为一些列表包含新行

awk -F "listID.${listID}.([0-9]+|[0-9]{3}|[0-9]{1,5}) = STRING: " '{print ","$2}'
但结果恰好是:

,test1
,test2
,test3
,test4
这是错误的,不像这个“test1,test2,test3,…,testn”,因为我不知道如何修改我的代码以得到上面所示的结果,一些想法我想在开始时添加新行,但代码对我不起作用,我想我使用了错误的格式。需要帮忙吗

awk -F "\nlistID.${listID}.([0-9]+|[0-9]{3}|[0-9]{1,5}) = STRING: " '{print ","$2}'
需要帮忙吗 关于此代码的第二个问题:

awk -F "listID.${listID}.([0-9]+|[0-9]{3}|[0-9]{1,5}) = STRING: " '{print ","$2}'

这个特定的格式([0-9]+|[0-9]{3}{0-9]{1,5})是否检查1到10000之间的数字

您可以这样做

test1,test2,test3,...,test7
awk '{ a = a","$4 } END {print a }' < foo

您可以使用sed将其删除
|sed's/^,/'

在最后一个空格后提取文本并用逗号分隔打印:

 cut -d' ' -f4 | paste -sd,
通过以下方式进行测试:

cat <<EOF |
listID.14.1 = STRING: test1
listID.14.2 = STRING: test2
listID.14.3 = STRING: test3
listID.14.4 = STRING: test4
listID.14.5 = STRING: test5 
listID.14.6 = STRING: test6
listID.14.7 = STRING: test7 
EOF
cut -d' ' -f4 | paste -sd,

如果您选择
Perl
,请尝试:

perl -lane 'push(@ary, pop(@F)); END {print join(",", @ary)};' list.txt
  • -l
    选项自动删除输入行的记录分隔符并添加 它返回到输出行
  • -一个
    选项可以像
    AWK
    一样启用空白字符的自动拆分模式 并将字段分配给数组
    @F
  • pop(@F)
    返回要添加到
    @ary
    @F
    的最后一个元素
  • -n
    选项使
    perl
    AWK
    一样迭代输入记录
顺便说一句,在回答你的第二个问题时,正则表达式
/^([1-9][0-9]{0,3}| 10000)$/
将匹配从1到10000的数字

所以你的最后一行是这样的:

awk -F "listID\.${listID}\.([1-9][0-9]{0,3}|10000) = STRING: " '{printf ",%s", $2}'
尽管如上所述将
FS
设置为复杂字符串可能不是一个好主意。它不会像您期望的那样工作,因为它不会跳过与正则表达式不匹配的行

希望这有帮助。

这应该可以:

awk '{printf "%s,",$NF} END {print ""}' file
test1,test2,test3,test4,test5,test6,test7,
如果您不喜欢结尾处的额外逗号:

awk '{printf (NR==1?"":",")"%s",$NF} END {print ""}' file
test1,test2,test3,test4,test5,test6,test7

您可以使用
sed s/\n//g
跟踪awk的结果<代码>awk'{printf(“%s%s”),(cnt++?“,”:“,$NF)}结束{print”“}文件?祝你好运