将使用awk的多个字符替换为,逗号表示csv
亲爱的 我有以下列表,其中有时包含10000个条目:将使用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
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”“}文件?祝你好运