2017-08-30 80 views
0

在Unix系統來提取文件的含字段分隔符,假設一個文件包含5個字段&數據如:如何使用剪切命令

"112233"|"Roshan"|"25"|" FAX 022 3987789 \| TEL 77766288892 \| abc "|"Male" 

需要提取第四字段。使用以下

column_value=`echo $line | cut -f4 -d'|'` 

只有我們將只得到" FAX 022 3987789 \

但需要" FAX 022 3987789 \| TEL 77766288892 \| abc "爲第4列的值。

+1

'cut'是不正確的工具。你需要一個CSV解析器 –

+0

更重要的是,將值讀入一個變量'$ line'可能是錯誤的方法(如果你確實這樣做了,可以使用'read -r'並引用'「$ line」'到處)。 – tripleee

回答

0

您可以按如下

echo $line | cut -f 4,5,6 -d\| 

另外,您可以用sed來代替添加兩個額外的字段「|」定界符用不同的字符(例如,標籤)

echo $line | sed s/\"\|\"/\t/g | cut -f 4 
1

cut是不適合工作的工具,當它涉及到需要用於分析輸入串/文件的多字符分隔符。

您可以使用GNU Awk with FPAT定義記錄中每個字段的外觀應如何。你可以把FPAT寫成正則表達式常量,在這種情況下,下面的東西應該可以工作。

FPAT = "(\"[^\"]+\")" 

Awk命令利用這一點,

line='"112233"|"Roshan"|"25"|" FAX 022 3987789 \| TEL 77766288892 \| abc "|"Male"' 
awk ' 
BEGIN { 
    FPAT = "(\"[^\"]+\")" 
}{print $4}' <<<"$line" 

產生一個輸出作爲

" FAX 022 3987789 \| TEL 77766288892 \| abc " 

Regular Expression - Test results

+2

參見https://stackoverflow.com/questions/7804673/escaping-separator-within-double-quotes-in-awk – tripleee