使用awk替换多个字符,csv用逗号逗号

问题描述 投票:1回答:3

亲爱的,

我有以下列表,有时包含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 -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之间的数字

linux bash shell awk redhat
3个回答
3
投票

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

 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,

输出:

test1,test2,test3,test4,test5,test6,test7

1
投票

您可以做这样的事情

awk '{ a = a","$4 } END {print a }' < foo

其中foo是包含您的数据的文件,这将导致前导逗号

,test1,test2,test3,test4,test5,test6,test7

您可以使用sed | sed 's/^,//'删除它。


0
投票

如果选择Perl,请尝试:

perl -lane 'push(@ary, pop(@F)); END {print join(",", @ary)};' list.txt
© www.soinside.com 2019 - 2024. All rights reserved.