awk將是我最好的去吧。
declare NAMES=($(cmd_that_generates_output | awk -F ';' 'NR==1{next}; { if($3 ~ /^[^"].*[^"]$/){$3="\""$3"\""}; printf $3 " " }'))
所以bash中執行$裏面的COMAND subsititution即一切()的CMD生成您的CSV和它管道AWK。
awk中檢查是否輸入是第一行(NR == 1),如果它是({下次})
對於每隔一行它檢查它在引號
妥善地包封上移動
if($3 ~ /^[^"].*[^"]$/){$3="\""$3"\""};
然後打印出由';'分隔的第3列, (即naem列)後跟一個空格。
printf $3 " "
這然後擴大了$()以名稱的空間分隔的列表,例如
declare NAMES=(name1 name2)
然後執行聲明這產生所謂的與每個名字作爲一個單一的元素名稱的數組。所以:
x.txt是你在你的問題中給出的輸出。
[email protected]$ cat x.txt
"STACK";"STACK_ID";"NAME";"DESCRIPTION";"CREATION_TIME";"DELETION_TIME";"STATUS"
"STACK";"arn:aws:cloudformation:us-west-1:222222222222:stack/LiveStream2/00000000-6000-00e2-acd3-333333333333";"LiveStream2";"(nil)";"2013-01-23T16:01:36Z";"2013-01-23T16:22:57Z";"DELETE_COMPLETE"
"STACK";"arn:aws:cloudformation:us-west-1:444444444444:stack/LiveStream/00000000-6000-00e2-acd3-222222222222";Live Stream;"(nil)";"2013-01-23T13:53:13Z";"2013-01-23T15:20:29Z";"DELETE_COMPLETE"
[email protected]$ declare NAMES=($(cat x.txt | awk -F ';' 'NR==1{next}; { if($3 ~ /^[^"].*[^"]$/){$3="\""$3"\""}; printf $3 " " }'))
[email protected]$ echo ${NAMES[@]}
"LiveStream2" "Live Stream"
你想要什麼要處理您的示例輸出,包含2個名稱值。使用第一個,最後一個或兩個。如果你有兩行以上的數據呢?回答這些問題是上述問題的一部分。祝你好運。 – shellter
只有一個NAME值以分號分隔。 – askmish