{'REST_SPS': u'4.1.4.339', 'REST_ROM': u'U32 v2.34 (04/08/2020)', 'REST_SMART': u'2.65', 'Server': 'example', 'REST_ILO': u'2.18 Jun 22 2020', 'REST_1G': u'20.14.62', 'REST_DISK': u'HPD5', 'REST_10G_2': u'14.26.1040', 'REST_IB': u'12.24.1000', 'REST_IE': u'0.2.2.0', 'REST_10G_1': u'14.26.1040'}
위의 줄은 여기에 있으며 출력은 다음과 같습니다.
4.1.4.339, U32 v2.34 (04/08/2020), 2.65, example, 2.18 Jun 22 2020, 20.14.62, HPD5,14.26.1040, 12.24.1000, 0.2.2.0, 14.26.1040
답변1
Steeldriver가 제안한 대로:
line="{'REST_SPS': u'4.1.4.339', 'REST_ROM': u'U32 v2.34 (04/08/2020)', 'REST_SMART': u'2.65', 'Server': 'example', 'REST_ILO': u'2.18 Jun 22 2020', 'REST_1G': u'20.14.62', 'REST_DISK': u'HPD5', 'REST_10G_2': u'14.26.1040', 'REST_IB': u'12.24.1000', 'REST_IE': u'0.2.2.0', 'REST_10G_1': u'14.26.1040'}"
echo "$line" | python3 -c '
import sys
line = sys.stdin.readline()
d = eval(line)
keys = ["REST_SPS", "REST_ROM", "REST_SMART", "Server", "REST_ILO", "REST_1G", "REST_DISK", "REST_10G_2", "REST_IB", "REST_IE", "REST_10G_1"]
print(", ".join([d[k] for k in keys]))
'
4.1.4.339, U32 v2.34 (04/08/2020), 2.65, example, 2.18 Jun 22 2020, 20.14.62, HPD5, 14.26.1040, 12.24.1000, 0.2.2.0, 14.26.1040
저는 실제로 Python 전문가가 아니므로 약간의 개선이 필요할 수 있습니다.
파일에서 줄을 읽는 경우 각 줄마다 Python을 한 번씩 호출하고 싶지는 않습니다. Python에서 처리를 수행하세요.
답변2
주문하다
awk -F "," '{for(i=1;i<=NF;i++){sub(/.*:/,"",$i);print $i}}' filename|sed -r "s/^\s+//g"| sed "s/[u'}]//g"| awk 'ORS="," {print $0}'|sed "s/,$//g"
산출
4.1.4.339,U32 v2.34 (04/08/2020),2.65,example,2.18 Jn 22 2020,20.14.62,HPD5,14.26.1040,12.24.1000,0.2.2.0,14.26.1040
답변3
이 작업을 전적으로 수행할 수 있지만 sed
보시다시피 sed
매우 긴 명령을 작성하는 것을 좋아하지 않는 한 이 특정 사용 사례에 이상적인 도구는 아닙니다 sed
. 나는 awk
그것을 사용하는 것이 좋습니다.
$ sed -e 's/[{}]//g; s/, /,/g; s/: /\n/g' file | \
sed -e "s/^u//g; s/'//g; s/,/\n/g" | sed -n 'g;n;p' | \
sed -n 's/.*/&,/;H;$x;$s/,\n/, /g;$s/\n\(.*\)/\1/;$s/\(.*\),/\1/;$p'
4.1.4.339, U32 v2.34 (04/08/2020), 2.65, example, 2.18 Jun 22 2020, 20.14.62, HPD5, 14.26.1040, 12.24.1000, 0.2.2.0, 14.26.1040