Amazon의 ec2 명령줄 도구를 통해 ec2 스냅샷 목록을 요청합니다.
ec2-describe-snapshots -H --hide-tags > snapshots.csv
데이터는 다음과 같습니다.
SnapshotId VolumeId StartTime OwnerId VolumeSize Description
snap-00b66464 vol-b99a38d0 2012-01-05 5098939 160 my backup
데이터를 다음으로 리디렉션하기 전에 어떻게 가로챌 수 있나요 snapshots.csv
?
- "탭"을 쉼표로 바꾸세요
- 값을 따옴표로 묶습니다.
- 값이 모두 숫자인 경우 접두사를 붙이면
=
Excel에서 이를 텍스트로 처리합니다. 예를 들어OwnerId
""=5098939
(인라인으로 수행할 수 없는 경우 이 접두사가 필요하지 않으며 스크립트 파일이 필요합니다.) 또는 대신 기능)
원하는 출력:
"SnapshotId","VolumeId","StartTime","OwnerId","VolumeSize","Description"
"snap-00b66464","vol-b99a38d0","2012-01-05","=5098939","=160","my backup"
답변1
#!/usr/bin/awk -f
BEGIN { FS = "\t"; OFS = "," }
{
for(i = 1; i <= NF; i++) {
if ($i + 0 == $i) { $i = "=" $i }
else gsub(/"/, "\"\"", $i);
$i = "\"" $i "\""
}
print
}
이 이름을 지정한다고 가정하면 convert.awk
다음 중 하나를 사용하여 호출할 수 있습니다.
ec2-describe-snapshots -H --hide-tags | awk -f convert.awk > snapshots.csv
또는 (실행 권한 추가 후 chmod a+x convert.awk
)
ec2-describe-snapshots -H --hide-tags | ./convert.awk > snapshots.csv
이렇게 하면 각 탭에 대해 새 열이 생성되어 주석 열이 함께 배치되지만(탭이 포함되지 않은 경우) 빈 열이 추가됩니다(예제 출력이 이와 같으므로 원할 수도 있음). 모든 공백을 분할하려면(테이블의 추가 탭이 축소되지만 설명의 각 단어가 새 열로 표시됨) 해당 FS="\t";
문을 삭제하세요.
"
후손을 위해 s 또는 s 또는 포함된 공백을 원하지 않으면 =
한 줄로 만들 수 있습니다.
awk -v OFS=, '{$1=$1;print}'
답변2
이것은 Perl 솔루션입니다. 이는 sed/awk로 가능할 수도 있지만 숫자 부분을 테스트하면 매우 보기 흉해질 수 있습니다.
ec2-describe-snapshots -H --hide-tags | \
perl -e 'use Scalar::Util qw(looks_like_number);
while (chomp($line = <STDIN>)) {
print(join(",", map { "\"" . (looks_like_number($_) ? "=$_" :
do {s/"/""/g; $_}) . "\"" }
split(/\t/, $line)) . "\n");
}' \
> snapshots.csv
답변3
나처럼 게으른 사람이고 스크립트를 작성하지 않고 하나의 명령줄에서 모든 작업을 수행하고 싶다면 이 방법을 사용하면 됩니다.
ec2-describe-snapshots -H --hide-tags | sed -e 's/^I/","/g' | sed -e 's/^/"/' | sed -e 's/$/"/'> snapshots.csv
^I
+ 를 ctrl누르면 됩니다 v i.
첫 번째 sed
는 모두 tabs
를 ","
. 두 번째는 sed
각 줄의 시작 부분에 a를 삽입하고 마지막 sed는 각 줄의 끝에 종결자를 삽입합니다."
"
답변4
sed는 제가 본 것 중 가장 유용한 Linux 유틸리티입니다.
sed 's/\t/","/g' TabSeparatedValues.txt > CommaSeparatedValues.csv
sed -i 's/.*/"&"/' CommaSeparatedValues.csv
첫 번째 명령은 각 줄의 모든 탭 문자를 쉼표와 따옴표로 바꿉니다. 두 번째 명령은 각 줄의 시작과 끝 부분에 따옴표를 삽입하여 각 값이 인용되도록 하여 쉼표를 값의 일부로 사용할 수 있도록 합니다.