是否可以拥有以下数据集:
| asn-query:
| BGP: 8.8.8.0/24 | Country: US
| Origin AS: 15169 - GOOGLE - Google Inc., US
| Peer AS: 1103 1239 2381 3257 6453
使用sed \ awk
转换为此结构asn-query, BGP: 8.8.8.0/24, Country: US, Origin AS: 15169 - GOOGLE - Google Inc., US, Peer AS: 1103 1239 2381 3257 6453
答案 0 :(得分:1)
如果您的文件包含上述文本的多个块,例如,如果您的文件包含:
| asn-query:
| BGP: 8.8.8.0/24 | Country: US
| Origin AS: 15169 - GOOGLE - Google Inc., US
| Peer AS: 1103 1239 2381 3257 6453
| asn-query:
| BGP: 2.2.2.0/24 | Country: XX
| Origin AS: 11111 - XXXXX - YYYYY Inc., US
| Peer AS: 1212 1313 1414 1515 1616
您可以使用paste
实用程序将每4行连接到一行,例如
paste - - - - < the_above_file.txt
会产生两行:
| asn-query: | BGP: 8.8.8.0/24 | Country: US | Origin AS: 15169 - GOOGLE - Google Inc., US | Peer AS: 1103 1239 2381 3257 6453
| asn-query: | BGP: 2.2.2.0/24 | Country: XX | Origin AS: 11111 - XXXXX - YYYYY Inc., US | Peer AS: 1212 1313 1414 1515 1616
并可以根据需要修改每一行,例如:
paste - - - - < asn.txt | sed 's/\|[[:blank:]]*//;s/://;s/[[:blank:]]*\|[[:blank:]]*/,/g'
将产生:
asn-query,BGP: 8.8.8.0/24,Country: US,Origin AS: 15169 - GOOGLE - Google Inc., US,Peer AS: 1103 1239 2381 3257 6453
asn-query,BGP: 2.2.2.0/24,Country: XX,Origin AS: 11111 - XXXXX - YYYYY Inc., US,Peer AS: 1212 1313 1414 1515 1616
使用perl(并解释)
paste - - - - < asn | perl -plE 's/\|\s*//; s/://; s/\s*\|\s*/,/g'
^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^
^ ^ ^
replace the 1st |+spaces with nothing--+ | |
| |
replace the 1st : with nothing ------------------+ |
|
replace all spaces + | + spaces with , -------------------+
答案 1 :(得分:0)
这应该有效:
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n//g' -e 's/|[[:blank:]]//g' file
有关解释,see this answer。
或者你可以使用tr
简化它(很多):
sed -e 's/|[[:blank:]]//g' file |tr -d '\n'
在第二种方法中,您将无法使用seds'-i
标志来执行就地编辑。你可以用这个:
echo "$(sed -e 's/|[[:blank:]]//g' file |tr -d '\n')" > file
作为就地编辑的替代方案,或使用其他文件:
sed -e 's/|[[:blank:]]//g' file |tr -d '\n' > newfile
答案 2 :(得分:0)
cat file | xargs echo -n | sed -e 's/ |/,/g' -e 's/:,/,/g' -e 's/| //g'
答案 3 :(得分:0)
$ awk -v RS='^$' -v ORS= -F'\\s*\\|\\s*' -v OFS=', ' '{sub(FS,"");$1=$1}1' file
asn-query:, BGP: 8.8.8.0/24, Country: US, Origin AS: 15169 - GOOGLE - Google Inc., US, Peer AS: 1103 1239 2381 3257 6453
以上是由于多字符RS而特定的gawk,并且通过阅读Arnold Robbins的书“Effective Awk Programming,4th Edition”来解释。
答案 4 :(得分:0)
您可以使用此gnu awk命令:
awk -v RS='(: *)?\n*\\|[[:blank:]]*' -v ORS=', ' 'NR>1 && RT; END{printf "%s", $0}' file
asn-query, BGP: 8.8.8.0/24 , Country: US, Origin AS: 15169 - GOOGLE - Google Inc., US, Peer AS: 1103 1239 2381 3257 6453