2015-07-13 29 views
2

我已閱讀並試圖就如何來標記這種字符串的不同的方法(如IFS,AWK,SED):擊:如何根據分隔字符串分解爲數組元素

data|date|token1|token2|process_job.sh Y 

我想用'|'並訪問標記化串是這樣的:

  • ARR [0]期望值數據
  • ARR [1]期望值是日期
  • ARR [2]期望值是TOKEN1
  • ARR [ 3]期望值是token2
  • ARR [4]期望值是process_job.shý

問題:

當我試圖訪問ARR [4]我總是process_job.sh只不是process_job.shŸ

任何對我的球員的想法?非常感謝您

回答

2

您可以使用read

# original string 
s='data|date|token1|token2|process_job.sh Y' 

# read into an array using IFS=| 
IFS='|' read -ra arr <<< "$s" 

# check array values 
declare -p arr 
declare -a arr='([0]="data" [1]="date" [2]="token1" [3]="token2" [4]="process_job.sh Y")' 
+0

你好@Anubhava我編輯我的問題。你的答案是否改變數組中每個索引的值?對不起,我是shell腳本的新手。只是想澄清。 – Joey

+0

我沒有得到你的問題。我的腳本沒有改變任何值,它使用標記字符串填充數組。 'declare -p arr'用於**打印**數組值。 – anubhava

+1

btw你也可以使用:'IFS ='|' arr =($ s)'而不是'read' – anubhava

1

這應做到:

s="data|date|token1|token2|process_job.sh Y" 
IFS="|" arr=($s) 
echo "${arr[0]}" 

輸出:

data 
+0

這會在銷售中將'IFS'設置爲'|'。 – anubhava

+2

@anubhava yap,加了一個關於這個的註釋.. – Jahid

+0

是的,當我使用IFS時,我保存了以前的值並將其改回原來的值。無論如何,感謝你們兩個:) – Joey

相關問題